diff options
author | 2015-09-23 14:17:36 -0700 | |
---|---|---|
committer | 2015-09-23 14:17:36 -0700 | |
commit | 940b64bde2820db2dbbe776fe09b4d54efcefa2d (patch) | |
tree | e23dd236c6277f713fdf15dfb8eedcacc902363d /tools/run_tests | |
parent | 8475047dcbf2506c90189f588d52a3d169329a09 (diff) | |
parent | ae4fc13503f492b447813b132f0bd6e40b436052 (diff) |
Merge github.com:grpc/grpc into shindig
Diffstat (limited to 'tools/run_tests')
-rwxr-xr-x | tools/run_tests/run_tests.py | 138 |
1 files changed, 121 insertions, 17 deletions
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index f7e9805393..13d60e6f7b 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -120,6 +120,18 @@ class ValgrindConfig(object): hash_targets=None) +def get_c_tests(travis, test_lang) : + out = [] + platforms_str = 'ci_platforms' if travis else 'platforms' + with open('tools/run_tests/tests.json') as f: + js = json.load(f) + return [tgt + for tgt in js + if tgt['language'] == test_lang and + platform_string() in tgt[platforms_str] and + not (travis and tgt['flaky'])] + + class CLanguage(object): def __init__(self, make_target, test_lang): @@ -129,16 +141,9 @@ class CLanguage(object): def test_specs(self, config, travis): out = [] - with open('tools/run_tests/tests.json') as f: - js = json.load(f) - platforms_str = 'ci_platforms' if travis else 'platforms' - binaries = [tgt - for tgt in js - if tgt['language'] == self.test_lang and - config.build_config not in tgt['exclude_configs'] and - platform_string() in tgt[platforms_str]] + binaries = get_c_tests(travis, self.test_lang) for target in binaries: - if travis and target['flaky']: + if config.build_config in target['exclude_configs']: continue if self.platform == 'windows': binary = 'vsprojects/%s/%s.exe' % ( @@ -157,9 +162,15 @@ class CLanguage(object): return ['buildtests_%s' % self.make_target] return ['buildtests_%s' % self.make_target, 'tools_%s' % self.make_target] + def pre_build_steps(self): + return [] + def build_steps(self): return [] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return True @@ -167,18 +178,60 @@ class CLanguage(object): return self.make_target +def gyp_test_paths(travis, config=None): + binaries = get_c_tests(travis, 'c') + out = [] + for target in binaries: + if config is not None and config.build_config in target['exclude_configs']: + continue + binary = 'out/Debug/%s' % target['name'] + out.append(binary) + return sorted(out) + + +class GYPCLanguage(object): + + def test_specs(self, config, travis): + return [config.job_spec([binary], [binary]) + for binary in gyp_test_paths(travis, config)] + + def pre_build_steps(self): + return [['gyp', '--depth=.', '--suffix=-gyp', 'grpc.gyp']] + + def make_targets(self): + return gyp_test_paths(False) + + def build_steps(self): + return [] + + def makefile_name(self): + return 'Makefile-gyp' + + def supports_multi_config(self): + return False + + def __str__(self): + return 'gyp' + + class NodeLanguage(object): def test_specs(self, config, travis): return [config.job_spec(['tools/run_tests/run_node.sh'], None, environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def pre_build_steps(self): + return [] + def make_targets(self): return ['static_c', 'shared_c'] def build_steps(self): return [['tools/run_tests/build_node.sh']] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -192,12 +245,18 @@ class PhpLanguage(object): return [config.job_spec(['src/php/bin/run_tests.sh'], None, environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def pre_build_steps(self): + return [] + def make_targets(self): return ['static_c', 'shared_c'] def build_steps(self): return [['tools/run_tests/build_php.sh']] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -221,6 +280,9 @@ class PythonLanguage(object): shortname='py.test', )] + def pre_build_steps(self): + return [] + def make_targets(self): return ['static_c', 'grpc_python_plugin', 'shared_c'] @@ -238,6 +300,9 @@ class PythonLanguage(object): do_newline=True) return commands + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -251,12 +316,18 @@ class RubyLanguage(object): return [config.job_spec(['tools/run_tests/run_ruby.sh'], None, environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def pre_build_steps(self): + return [] + def make_targets(self): return ['static_c'] def build_steps(self): return [['tools/run_tests/build_ruby.sh']] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -282,6 +353,9 @@ class CSharpLanguage(object): environ=_FORCE_ENVIRON_FOR_WRAPPERS) for assembly in assemblies] + def pre_build_steps(self): + return [] + def make_targets(self): # For Windows, this target doesn't really build anything, # everything is build by buildall script later. @@ -296,6 +370,9 @@ class CSharpLanguage(object): else: return [['tools/run_tests/build_csharp.sh']] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -309,12 +386,18 @@ class ObjCLanguage(object): return [config.job_spec(['src/objective-c/tests/run_tests.sh'], None, environ=_FORCE_ENVIRON_FOR_WRAPPERS)] + def pre_build_steps(self): + return [] + def make_targets(self): return ['grpc_objective_c_plugin', 'interop_server'] def build_steps(self): return [['src/objective-c/tests/build_tests.sh']] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -328,12 +411,18 @@ class Sanity(object): return [config.job_spec('tools/run_tests/run_sanity.sh', None), config.job_spec('tools/run_tests/check_sources_and_headers.py', None)] + def pre_build_steps(self): + return [] + def make_targets(self): return ['run_dep_checks'] def build_steps(self): return [] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return False @@ -346,12 +435,18 @@ class Build(object): def test_specs(self, config, travis): return [] + def pre_build_steps(self): + return [] + def make_targets(self): return ['static'] def build_steps(self): return [] + def makefile_name(self): + return 'Makefile' + def supports_multi_config(self): return True @@ -382,6 +477,7 @@ _DEFAULT = ['opt'] _LANGUAGES = { 'c++': CLanguage('cxx', 'c++'), 'c': CLanguage('c', 'c'), + 'gyp': GYPCLanguage(), 'node': NodeLanguage(), 'php': PhpLanguage(), 'python': PythonLanguage(), @@ -514,33 +610,41 @@ if len(build_configs) > 1: sys.exit(1) if platform.system() == 'Windows': - def make_jobspec(cfg, targets): + def make_jobspec(cfg, targets, makefile='Makefile'): extra_args = [] # better do parallel compilation extra_args.extend(["/m"]) # disable PDB generation: it's broken, and we don't need it during CI extra_args.extend(["/p:GenerateDebugInformation=false", "/p:DebugInformationFormat=None"]) return [ - jobset.JobSpec(['vsprojects\\build.bat', - 'vsprojects\\%s.sln' % target, + jobset.JobSpec(['vsprojects\\build.bat', + 'vsprojects\\%s.sln' % target, '/p:Configuration=%s' % _WINDOWS_CONFIG[cfg]] + extra_args, shell=True, timeout_seconds=90*60) for target in targets] else: - def make_jobspec(cfg, targets): + def make_jobspec(cfg, targets, makefile='Makefile'): return [jobset.JobSpec([os.getenv('MAKE', 'make'), + '-f', makefile, '-j', '%d' % (multiprocessing.cpu_count() + 1), 'EXTRA_DEFINES=GRPC_TEST_SLOWDOWN_MACHINE_FACTOR=%f' % args.slowdown, 'CONFIG=%s' % cfg] + targets, timeout_seconds=30*60)] +make_targets = {} +for l in languages: + makefile = l.makefile_name() + make_targets[makefile] = make_targets.get(makefile, set()).union( + set(l.make_targets())) -make_targets = list(set(itertools.chain.from_iterable( - l.make_targets() for l in languages))) -build_steps = [] +build_steps = list(set( + jobset.JobSpec(cmdline, environ={'CONFIG': cfg}) + for cfg in build_configs + for l in languages + for cmdline in l.pre_build_steps())) if make_targets: - make_commands = itertools.chain.from_iterable(make_jobspec(cfg, make_targets) for cfg in build_configs) + make_commands = itertools.chain.from_iterable(make_jobspec(cfg, list(targets), makefile) for cfg in build_configs for (makefile, targets) in make_targets.iteritems()) build_steps.extend(set(make_commands)) build_steps.extend(set( jobset.JobSpec(cmdline, environ={'CONFIG': cfg}) |