|  | #!/usr/bin/env python | 
|  | # | 
|  | # Copyright 2016 Google Inc. | 
|  | # | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  |  | 
|  | """Run all infrastructure-related tests.""" | 
|  |  | 
|  |  | 
|  | import os | 
|  | import subprocess | 
|  | import sys | 
|  |  | 
|  |  | 
|  | INFRA_BOTS_DIR = os.path.dirname(os.path.realpath(__file__)) | 
|  | SKIA_DIR = os.path.abspath(os.path.join(INFRA_BOTS_DIR, os.pardir, os.pardir)) | 
|  |  | 
|  |  | 
|  | def test(cmd, cwd): | 
|  | try: | 
|  | subprocess.check_output(cmd, cwd=cwd, stderr=subprocess.STDOUT) | 
|  | except subprocess.CalledProcessError as e: | 
|  | return e.output | 
|  |  | 
|  |  | 
|  | def python_unit_tests(train): | 
|  | if train: | 
|  | return None | 
|  | return test( | 
|  | ['python', '-m', 'unittest', 'discover', '-s', '.', '-p', '*_test.py'], | 
|  | INFRA_BOTS_DIR) | 
|  |  | 
|  |  | 
|  | def recipe_test(train): | 
|  | cmd = [ | 
|  | 'python', os.path.join(INFRA_BOTS_DIR, 'recipes.py'), 'test'] | 
|  | if train: | 
|  | cmd.append('train') | 
|  | else: | 
|  | cmd.append('run') | 
|  | return test(cmd, SKIA_DIR) | 
|  |  | 
|  |  | 
|  | def gen_tasks_test(train): | 
|  | cmd = ['go', 'run', 'gen_tasks.go'] | 
|  | if not train: | 
|  | cmd.append('--test') | 
|  | try: | 
|  | output = test(cmd, INFRA_BOTS_DIR) | 
|  | except OSError: | 
|  | return ('Failed to run "%s"; do you have Go installed on your machine?' | 
|  | % ' '.join(cmd)) | 
|  | if output and 'cannot find package "go.skia.org/infra' in output: | 
|  | return ('Failed to run gen_tests.go:\n\n%s\nMaybe you need to run:\n\n' | 
|  | '$ go get -u go.skia.org/infra/...' % output) | 
|  | return output | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | train = False | 
|  | if '--train' in sys.argv: | 
|  | train = True | 
|  |  | 
|  | tests = ( | 
|  | python_unit_tests, | 
|  | recipe_test, | 
|  | gen_tasks_test, | 
|  | ) | 
|  | errs = [] | 
|  | for t in tests: | 
|  | err = t(train) | 
|  | if err: | 
|  | errs.append(err) | 
|  |  | 
|  | if len(errs) > 0: | 
|  | print >> sys.stderr, 'Test failures:\n' | 
|  | for err in errs: | 
|  | print >> sys.stderr, '==============================' | 
|  | print >> sys.stderr, err | 
|  | print >> sys.stderr, '==============================' | 
|  | sys.exit(1) | 
|  |  | 
|  | if train: | 
|  | print 'Trained tests successfully.' | 
|  | else: | 
|  | print 'All tests passed!' | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | main() |