distribtest_targets.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 # Copyright 2016 gRPC authors.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 # http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 """Definition of targets run distribution package tests."""
16 
17 import os.path
18 import sys
19 
20 sys.path.insert(0, os.path.abspath('..'))
21 import python_utils.jobset as jobset
22 
23 
25  dockerfile_dir,
26  shell_command,
27  environ={},
28  flake_retries=0,
29  timeout_retries=0,
30  copy_rel_path=None,
31  timeout_seconds=30 * 60):
32  """Creates jobspec for a task running under docker."""
33  environ = environ.copy()
34  # the entire repo will be cloned if copy_rel_path is not set.
35  if copy_rel_path:
36  environ['RELATIVE_COPY_PATH'] = copy_rel_path
37 
38  docker_args = []
39  for k, v in list(environ.items()):
40  docker_args += ['-e', '%s=%s' % (k, v)]
41  docker_env = {
42  'DOCKERFILE_DIR': dockerfile_dir,
43  'DOCKER_RUN_SCRIPT': 'tools/run_tests/dockerize/docker_run.sh',
44  'DOCKER_RUN_SCRIPT_COMMAND': shell_command,
45  }
46  jobspec = jobset.JobSpec(
47  cmdline=['tools/run_tests/dockerize/build_and_run_docker.sh'] +
48  docker_args,
49  environ=docker_env,
50  shortname='distribtest.%s' % (name),
51  timeout_seconds=timeout_seconds,
52  flake_retries=flake_retries,
53  timeout_retries=timeout_retries)
54  return jobspec
55 
56 
57 def create_jobspec(name,
58  cmdline,
59  environ=None,
60  shell=False,
61  flake_retries=0,
62  timeout_retries=0,
63  use_workspace=False,
64  timeout_seconds=10 * 60):
65  """Creates jobspec."""
66  environ = environ.copy()
67  if use_workspace:
68  environ['WORKSPACE_NAME'] = 'workspace_%s' % name
69  cmdline = ['bash', 'tools/run_tests/artifacts/run_in_workspace.sh'
70  ] + cmdline
71  jobspec = jobset.JobSpec(cmdline=cmdline,
72  environ=environ,
73  shortname='distribtest.%s' % (name),
74  timeout_seconds=timeout_seconds,
75  flake_retries=flake_retries,
76  timeout_retries=timeout_retries,
77  shell=shell)
78  return jobspec
79 
80 
81 class CSharpDistribTest(object):
82  """Tests C# NuGet package"""
83 
84  def __init__(self,
85  platform,
86  arch,
87  docker_suffix=None,
88  use_dotnet_cli=False,
89  presubmit=False):
90  self.name = 'csharp_%s_%s' % (platform, arch)
91  self.platform = platform
92  self.arch = arch
93  self.docker_suffix = docker_suffix
94  self.labels = ['distribtest', 'csharp', platform, arch]
95  if presubmit:
96  self.labels.append('presubmit')
97  self.script_suffix = ''
98  if docker_suffix:
99  self.name += '_%s' % docker_suffix
100  self.labels.append(docker_suffix)
101  if use_dotnet_cli:
102  self.name += '_dotnetcli'
103  self.script_suffix = '_dotnetcli'
104  self.labels.append('dotnetcli')
105  else:
106  self.labels.append('olddotnet')
107 
109  return []
110 
111  def build_jobspec(self, inner_jobs=None):
112  del inner_jobs # arg unused as there is little opportunity for parallelizing whats inside the distribtests
113  if self.platform == 'linux':
114  return create_docker_jobspec(
115  self.name,
116  'tools/dockerfile/distribtest/csharp_%s_%s' %
117  (self.docker_suffix, self.arch),
118  'tools/run_tests/artifacts/run_distribtest_csharp.sh',
119  copy_rel_path='tools/run_tests/artifacts')
120  elif self.platform == 'macos':
121  return create_jobspec(
122  self.name,
123  ['tools/run_tests/artifacts/run_distribtest_csharp.sh'],
124  environ={'EXTERNAL_GIT_ROOT': '../../../..'},
125  use_workspace=True)
126  elif self.platform == 'windows':
127  if self.arch == 'x64':
128  # Use double leading / as the first occurrence gets removed by msys bash
129  # when invoking the .bat file (side-effect of posix path conversion)
130  environ = {
131  'MSBUILD_EXTRA_ARGS': '//p:Platform=x64',
132  'DISTRIBTEST_OUTPATH': 'DistribTest\\bin\\x64\\Debug'
133  }
134  else:
135  environ = {'DISTRIBTEST_OUTPATH': 'DistribTest\\bin\\Debug'}
136  return create_jobspec(
137  self.name,
138  ['bash', 'tools/run_tests/artifacts/run_distribtest_csharp.sh'],
139  environ=environ,
140  use_workspace=True)
141  else:
142  raise Exception("Not supported yet.")
143 
144  def __str__(self):
145  return self.name
146 
147 
148 class PythonDistribTest(object):
149  """Tests Python package"""
150 
151  def __init__(self,
152  platform,
153  arch,
154  docker_suffix,
155  source=False,
156  presubmit=False):
157  self.source = source
158  if source:
159  self.name = 'python_dev_%s_%s_%s' % (platform, arch, docker_suffix)
160  else:
161  self.name = 'python_%s_%s_%s' % (platform, arch, docker_suffix)
162  self.platform = platform
163  self.arch = arch
164  self.docker_suffix = docker_suffix
165  self.labels = ['distribtest', 'python', platform, arch, docker_suffix]
166  if presubmit:
167  self.labels.append('presubmit')
168 
170  return []
171 
172  def build_jobspec(self, inner_jobs=None):
173  # TODO(jtattermusch): honor inner_jobs arg for this task.
174  del inner_jobs
175  if not self.platform == 'linux':
176  raise Exception("Not supported yet.")
177 
178  if self.source:
179  return create_docker_jobspec(
180  self.name,
181  'tools/dockerfile/distribtest/python_dev_%s_%s' %
182  (self.docker_suffix, self.arch),
183  'test/distrib/python/run_source_distrib_test.sh',
184  copy_rel_path='test/distrib')
185  else:
186  return create_docker_jobspec(
187  self.name,
188  'tools/dockerfile/distribtest/python_%s_%s' %
189  (self.docker_suffix, self.arch),
190  'test/distrib/python/run_binary_distrib_test.sh',
191  copy_rel_path='test/distrib')
192 
193  def __str__(self):
194  return self.name
195 
196 
197 class RubyDistribTest(object):
198  """Tests Ruby package"""
199 
200  def __init__(self,
201  platform,
202  arch,
203  docker_suffix,
204  ruby_version=None,
205  source=False,
206  presubmit=False):
207  self.package_type = 'binary'
208  if source:
209  self.package_type = 'source'
210  self.name = 'ruby_%s_%s_%s_version_%s_package_type_%s' % (
211  platform, arch, docker_suffix, ruby_version or
212  'unspecified', self.package_type)
213  self.platform = platform
214  self.arch = arch
215  self.docker_suffix = docker_suffix
216  self.ruby_version = ruby_version
217  self.labels = ['distribtest', 'ruby', platform, arch, docker_suffix]
218  if presubmit:
219  self.labels.append('presubmit')
220 
222  return []
223 
224  def build_jobspec(self, inner_jobs=None):
225  # TODO(jtattermusch): honor inner_jobs arg for this task.
226  del inner_jobs
227  arch_to_gem_arch = {
228  'x64': 'x86_64',
229  'x86': 'x86',
230  }
231  if not self.platform == 'linux':
232  raise Exception("Not supported yet.")
233 
234  dockerfile_name = 'tools/dockerfile/distribtest/ruby_%s_%s' % (
235  self.docker_suffix, self.arch)
236  if self.ruby_version is not None:
237  dockerfile_name += '_%s' % self.ruby_version
238  return create_docker_jobspec(
239  self.name,
240  dockerfile_name,
241  'test/distrib/ruby/run_distrib_test.sh %s %s %s' %
242  (arch_to_gem_arch[self.arch], self.platform, self.package_type),
243  copy_rel_path='test/distrib')
244 
245  def __str__(self):
246  return self.name
247 
248 
249 class PHP7DistribTest(object):
250  """Tests PHP7 package"""
251 
252  def __init__(self, platform, arch, docker_suffix=None, presubmit=False):
253  self.name = 'php7_%s_%s_%s' % (platform, arch, docker_suffix)
254  self.platform = platform
255  self.arch = arch
256  self.docker_suffix = docker_suffix
257  self.labels = ['distribtest', 'php', 'php7', platform, arch]
258  if presubmit:
259  self.labels.append('presubmit')
260  if docker_suffix:
261  self.labels.append(docker_suffix)
262 
264  return []
265 
266  def build_jobspec(self, inner_jobs=None):
267  # TODO(jtattermusch): honor inner_jobs arg for this task.
268  del inner_jobs
269  if self.platform == 'linux':
270  return create_docker_jobspec(
271  self.name,
272  'tools/dockerfile/distribtest/php7_%s_%s' %
273  (self.docker_suffix, self.arch),
274  'test/distrib/php/run_distrib_test.sh',
275  copy_rel_path='test/distrib')
276  elif self.platform == 'macos':
277  return create_jobspec(
278  self.name, ['test/distrib/php/run_distrib_test_macos.sh'],
279  environ={'EXTERNAL_GIT_ROOT': '../../../..'},
280  timeout_seconds=15 * 60,
281  use_workspace=True)
282  else:
283  raise Exception("Not supported yet.")
284 
285  def __str__(self):
286  return self.name
287 
288 
289 class CppDistribTest(object):
290  """Tests Cpp make install by building examples."""
291 
292  def __init__(self,
293  platform,
294  arch,
295  docker_suffix=None,
296  testcase=None,
297  presubmit=False):
298  if platform == 'linux':
299  self.name = 'cpp_%s_%s_%s_%s' % (platform, arch, docker_suffix,
300  testcase)
301  else:
302  self.name = 'cpp_%s_%s_%s' % (platform, arch, testcase)
303  self.platform = platform
304  self.arch = arch
305  self.docker_suffix = docker_suffix
306  self.testcase = testcase
307  self.labels = [
308  'distribtest',
309  'cpp',
310  platform,
311  arch,
312  testcase,
313  ]
314  if presubmit:
315  self.labels.append('presubmit')
316  if docker_suffix:
317  self.labels.append(docker_suffix)
318 
320  return []
321 
322  def build_jobspec(self, inner_jobs=None):
323  environ = {}
324  if inner_jobs is not None:
325  # set number of parallel jobs for the C++ build
326  environ['GRPC_CPP_DISTRIBTEST_BUILD_COMPILER_JOBS'] = str(
327  inner_jobs)
328 
329  if self.platform == 'linux':
330  return create_docker_jobspec(
331  self.name,
332  'tools/dockerfile/distribtest/cpp_%s_%s' %
333  (self.docker_suffix, self.arch),
334  'test/distrib/cpp/run_distrib_test_%s.sh' % self.testcase,
335  timeout_seconds=45 * 60)
336  elif self.platform == 'windows':
337  return create_jobspec(
338  self.name,
339  ['test\\distrib\\cpp\\run_distrib_test_%s.bat' % self.testcase],
340  environ={},
341  timeout_seconds=30 * 60,
342  use_workspace=True)
343  else:
344  raise Exception("Not supported yet.")
345 
346  def __str__(self):
347  return self.name
348 
349 
350 def targets():
351  """Gets list of supported targets"""
352  return [
353  # C++
354  CppDistribTest('linux', 'x64', 'stretch', 'cmake', presubmit=True),
355  CppDistribTest('linux',
356  'x64',
357  'stretch',
358  'cmake_as_submodule',
359  presubmit=True),
360  CppDistribTest('linux',
361  'x64',
362  'stretch',
363  'cmake_as_externalproject',
364  presubmit=True),
365  CppDistribTest('linux',
366  'x64',
367  'stretch',
368  'cmake_fetchcontent',
369  presubmit=True),
370  CppDistribTest('linux',
371  'x64',
372  'stretch',
373  'cmake_module_install',
374  presubmit=True),
375  CppDistribTest('linux',
376  'x64',
377  'stretch',
378  'cmake_module_install_pkgconfig',
379  presubmit=True),
380  CppDistribTest('linux',
381  'x64',
382  'stretch',
383  'cmake_pkgconfig',
384  presubmit=True),
385  CppDistribTest('linux',
386  'x64',
387  'stretch_aarch64_cross',
388  'cmake_aarch64_cross',
389  presubmit=True),
390  CppDistribTest('windows', 'x86', testcase='cmake', presubmit=True),
391  CppDistribTest('windows',
392  'x86',
393  testcase='cmake_as_externalproject',
394  presubmit=True),
395  # C#
396  CSharpDistribTest('linux', 'x64', 'stretch', presubmit=True),
397  CSharpDistribTest('linux',
398  'x64',
399  'stretch',
400  use_dotnet_cli=True,
401  presubmit=True),
402  CSharpDistribTest('linux', 'x64', 'centos7'),
403  CSharpDistribTest('linux', 'x64', 'ubuntu1604'),
404  CSharpDistribTest('linux', 'x64', 'ubuntu1604', use_dotnet_cli=True),
405  CSharpDistribTest('linux',
406  'x64',
407  'alpine',
408  use_dotnet_cli=True,
409  presubmit=True),
410  CSharpDistribTest('linux',
411  'x64',
412  'dotnet31',
413  use_dotnet_cli=True,
414  presubmit=True),
415  CSharpDistribTest('linux',
416  'x64',
417  'dotnet5',
418  use_dotnet_cli=True,
419  presubmit=True),
420  CSharpDistribTest('macos', 'x64', presubmit=True),
421  CSharpDistribTest('windows', 'x86', presubmit=True),
422  CSharpDistribTest('windows', 'x64', presubmit=True),
423  # Python
424  PythonDistribTest('linux', 'x64', 'buster', presubmit=True),
425  PythonDistribTest('linux', 'x86', 'buster', presubmit=True),
426  PythonDistribTest('linux', 'x64', 'centos7'),
427  PythonDistribTest('linux', 'x64', 'fedora34'),
428  PythonDistribTest('linux', 'x64', 'opensuse'),
429  PythonDistribTest('linux', 'x64', 'arch'),
430  PythonDistribTest('linux', 'x64', 'alpine'),
431  PythonDistribTest('linux', 'x64', 'ubuntu1804'),
432  PythonDistribTest('linux', 'aarch64', 'python38_buster',
433  presubmit=True),
434  PythonDistribTest('linux',
435  'x64',
436  'alpine3.7',
437  source=True,
438  presubmit=True),
439  PythonDistribTest('linux', 'x64', 'buster', source=True,
440  presubmit=True),
441  PythonDistribTest('linux', 'x86', 'buster', source=True,
442  presubmit=True),
443  PythonDistribTest('linux', 'x64', 'centos7', source=True),
444  PythonDistribTest('linux', 'x64', 'fedora34', source=True),
445  PythonDistribTest('linux', 'x64', 'arch', source=True),
446  PythonDistribTest('linux', 'x64', 'ubuntu1804', source=True),
447  # Ruby
448  RubyDistribTest('linux', 'x64', 'stretch', ruby_version='ruby_2_5'),
449  RubyDistribTest('linux', 'x64', 'stretch', ruby_version='ruby_2_6'),
450  RubyDistribTest('linux',
451  'x64',
452  'stretch',
453  ruby_version='ruby_2_7',
454  presubmit=True),
455  # TODO(apolcyn): add a ruby 3.0 test once protobuf adds support
456  RubyDistribTest('linux',
457  'x64',
458  'stretch',
459  ruby_version='ruby_2_5',
460  source=True,
461  presubmit=True),
462  RubyDistribTest('linux', 'x64', 'centos7'),
463  RubyDistribTest('linux', 'x64', 'ubuntu1604'),
464  RubyDistribTest('linux', 'x64', 'ubuntu1804', presubmit=True),
465  # PHP7
466  PHP7DistribTest('linux', 'x64', 'stretch', presubmit=True),
467  PHP7DistribTest('macos', 'x64', presubmit=True),
468  ]
xds_interop_client.str
str
Definition: xds_interop_client.py:487
artifacts.distribtest_targets.PythonDistribTest.build_jobspec
def build_jobspec(self, inner_jobs=None)
Definition: distribtest_targets.py:172
artifacts.distribtest_targets.PHP7DistribTest.__init__
def __init__(self, platform, arch, docker_suffix=None, presubmit=False)
Definition: distribtest_targets.py:252
artifacts.distribtest_targets.RubyDistribTest.docker_suffix
docker_suffix
Definition: distribtest_targets.py:209
artifacts.distribtest_targets.PHP7DistribTest.labels
labels
Definition: distribtest_targets.py:257
artifacts.distribtest_targets.CSharpDistribTest.__str__
def __str__(self)
Definition: distribtest_targets.py:144
artifacts.distribtest_targets.CppDistribTest.__init__
def __init__(self, platform, arch, docker_suffix=None, testcase=None, presubmit=False)
Definition: distribtest_targets.py:292
artifacts.distribtest_targets.CppDistribTest.build_jobspec
def build_jobspec(self, inner_jobs=None)
Definition: distribtest_targets.py:322
artifacts.distribtest_targets.create_jobspec
def create_jobspec(name, cmdline, environ=None, shell=False, flake_retries=0, timeout_retries=0, use_workspace=False, timeout_seconds=10 *60)
Definition: distribtest_targets.py:57
artifacts.distribtest_targets.PHP7DistribTest.pre_build_jobspecs
def pre_build_jobspecs(self)
Definition: distribtest_targets.py:263
artifacts.distribtest_targets.CSharpDistribTest.script_suffix
script_suffix
Definition: distribtest_targets.py:92
artifacts.distribtest_targets.CSharpDistribTest.pre_build_jobspecs
def pre_build_jobspecs(self)
Definition: distribtest_targets.py:108
artifacts.distribtest_targets.PythonDistribTest.platform
platform
Definition: distribtest_targets.py:157
artifacts.distribtest_targets.CppDistribTest.pre_build_jobspecs
def pre_build_jobspecs(self)
Definition: distribtest_targets.py:319
artifacts.distribtest_targets.PHP7DistribTest.build_jobspec
def build_jobspec(self, inner_jobs=None)
Definition: distribtest_targets.py:266
artifacts.distribtest_targets.RubyDistribTest.ruby_version
ruby_version
Definition: distribtest_targets.py:210
artifacts.distribtest_targets.PHP7DistribTest
Definition: distribtest_targets.py:249
artifacts.distribtest_targets.CSharpDistribTest.arch
arch
Definition: distribtest_targets.py:87
artifacts.distribtest_targets.PythonDistribTest.labels
labels
Definition: distribtest_targets.py:160
artifacts.distribtest_targets.CppDistribTest.arch
arch
Definition: distribtest_targets.py:299
artifacts.distribtest_targets.RubyDistribTest.package_type
package_type
Definition: distribtest_targets.py:201
artifacts.distribtest_targets.RubyDistribTest.platform
platform
Definition: distribtest_targets.py:207
artifacts.distribtest_targets.PythonDistribTest.pre_build_jobspecs
def pre_build_jobspecs(self)
Definition: distribtest_targets.py:169
artifacts.distribtest_targets.CSharpDistribTest.__init__
def __init__(self, platform, arch, docker_suffix=None, use_dotnet_cli=False, presubmit=False)
Definition: distribtest_targets.py:84
artifacts.distribtest_targets.PythonDistribTest
Definition: distribtest_targets.py:148
artifacts.distribtest_targets.CppDistribTest
Definition: distribtest_targets.py:289
artifacts.distribtest_targets.PythonDistribTest.name
name
Definition: distribtest_targets.py:154
artifacts.distribtest_targets.RubyDistribTest.__str__
def __str__(self)
Definition: distribtest_targets.py:245
python_utils.jobset
Definition: jobset.py:1
artifacts.distribtest_targets.PHP7DistribTest.name
name
Definition: distribtest_targets.py:253
artifacts.distribtest_targets.CSharpDistribTest.platform
platform
Definition: distribtest_targets.py:86
artifacts.distribtest_targets.PythonDistribTest.docker_suffix
docker_suffix
Definition: distribtest_targets.py:159
artifacts.distribtest_targets.CppDistribTest.labels
labels
Definition: distribtest_targets.py:302
artifacts.distribtest_targets.PythonDistribTest.__str__
def __str__(self)
Definition: distribtest_targets.py:193
artifacts.distribtest_targets.RubyDistribTest.__init__
def __init__(self, platform, arch, docker_suffix, ruby_version=None, source=False, presubmit=False)
Definition: distribtest_targets.py:200
artifacts.distribtest_targets.PythonDistribTest.__init__
def __init__(self, platform, arch, docker_suffix, source=False, presubmit=False)
Definition: distribtest_targets.py:151
artifacts.distribtest_targets.CppDistribTest.testcase
testcase
Definition: distribtest_targets.py:301
artifacts.distribtest_targets.create_docker_jobspec
def create_docker_jobspec(name, dockerfile_dir, shell_command, environ={}, flake_retries=0, timeout_retries=0, copy_rel_path=None, timeout_seconds=30 *60)
Definition: distribtest_targets.py:24
artifacts.distribtest_targets.RubyDistribTest.name
name
Definition: distribtest_targets.py:204
artifacts.distribtest_targets.PHP7DistribTest.arch
arch
Definition: distribtest_targets.py:255
artifacts.distribtest_targets.CSharpDistribTest
Definition: distribtest_targets.py:81
artifacts.distribtest_targets.RubyDistribTest.build_jobspec
def build_jobspec(self, inner_jobs=None)
Definition: distribtest_targets.py:224
artifacts.distribtest_targets.PythonDistribTest.arch
arch
Definition: distribtest_targets.py:158
artifacts.distribtest_targets.PHP7DistribTest.__str__
def __str__(self)
Definition: distribtest_targets.py:285
artifacts.distribtest_targets.CppDistribTest.platform
platform
Definition: distribtest_targets.py:298
artifacts.distribtest_targets.RubyDistribTest.pre_build_jobspecs
def pre_build_jobspecs(self)
Definition: distribtest_targets.py:221
artifacts.distribtest_targets.CppDistribTest.name
name
Definition: distribtest_targets.py:294
artifacts.distribtest_targets.CSharpDistribTest.build_jobspec
def build_jobspec(self, inner_jobs=None)
Definition: distribtest_targets.py:111
artifacts.distribtest_targets.RubyDistribTest
Definition: distribtest_targets.py:197
artifacts.distribtest_targets.targets
def targets()
Definition: distribtest_targets.py:350
artifacts.distribtest_targets.PHP7DistribTest.platform
platform
Definition: distribtest_targets.py:254
artifacts.distribtest_targets.RubyDistribTest.labels
labels
Definition: distribtest_targets.py:211
artifacts.distribtest_targets.PythonDistribTest.source
source
Definition: distribtest_targets.py:152
artifacts.distribtest_targets.CSharpDistribTest.labels
labels
Definition: distribtest_targets.py:89
artifacts.distribtest_targets.CppDistribTest.docker_suffix
docker_suffix
Definition: distribtest_targets.py:300
artifacts.distribtest_targets.CSharpDistribTest.docker_suffix
docker_suffix
Definition: distribtest_targets.py:88
artifacts.distribtest_targets.CppDistribTest.__str__
def __str__(self)
Definition: distribtest_targets.py:346
artifacts.distribtest_targets.CSharpDistribTest.name
name
Definition: distribtest_targets.py:85
artifacts.distribtest_targets.RubyDistribTest.arch
arch
Definition: distribtest_targets.py:208
artifacts.distribtest_targets.PHP7DistribTest.docker_suffix
docker_suffix
Definition: distribtest_targets.py:256


grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:16