| Index: infra/bots/infra_tests.py | 
| diff --git a/infra/bots/infra_tests.py b/infra/bots/infra_tests.py | 
| new file mode 100755 | 
| index 0000000000000000000000000000000000000000..779ea8d83b1587e63f8a517b98c912b525b74a16 | 
| --- /dev/null | 
| +++ b/infra/bots/infra_tests.py | 
| @@ -0,0 +1,77 @@ | 
| +#!/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(): | 
| +  return test( | 
| +      ['python', '-m', 'unittest', 'discover', '-s', '.', '-p', '*_test.py'], | 
| +      INFRA_BOTS_DIR) | 
| + | 
| + | 
| +def recipe_simulation_test(): | 
| +  return test( | 
| +      ['python', os.path.join(INFRA_BOTS_DIR, 'recipes.py'), 'simulation_test'], | 
| +      SKIA_DIR) | 
| + | 
| + | 
| +def gen_tasks_test(): | 
| +  cmd = ['go', 'run', 'gen_tasks.go', '--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(): | 
| +  tests = ( | 
| +      python_unit_tests, | 
| +      recipe_simulation_test, | 
| +      gen_tasks_test, | 
| +  ) | 
| +  errs = [] | 
| +  for t in tests: | 
| +    err = t() | 
| +    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) | 
| + | 
| +  print 'All tests passed!' | 
| + | 
| + | 
| +if __name__ == '__main__': | 
| +  main() | 
|  |