1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 Google Inc. 4*c8dee2aaSAndroid Build Coastguard Worker# 5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker"""Run all infrastructure-related tests.""" 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Workerimport os 13*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 14*c8dee2aaSAndroid Build Coastguard Workerimport sys 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard WorkerINFRA_BOTS_DIR = os.path.dirname(os.path.realpath(__file__)) 18*c8dee2aaSAndroid Build Coastguard WorkerSKIA_DIR = os.path.abspath(os.path.join(INFRA_BOTS_DIR, os.pardir, os.pardir)) 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Workerdef test(cmd, cwd): 22*c8dee2aaSAndroid Build Coastguard Worker try: 23*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_output(cmd, cwd=cwd, stderr=subprocess.STDOUT, encoding='utf-8') 24*c8dee2aaSAndroid Build Coastguard Worker except subprocess.CalledProcessError as e: 25*c8dee2aaSAndroid Build Coastguard Worker return e.output 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Workerdef python_unit_tests(train): 29*c8dee2aaSAndroid Build Coastguard Worker if train: 30*c8dee2aaSAndroid Build Coastguard Worker return None 31*c8dee2aaSAndroid Build Coastguard Worker return test( 32*c8dee2aaSAndroid Build Coastguard Worker [sys.executable, '-u', '-m', 'unittest', 'discover', '-s', '.', '-p', 33*c8dee2aaSAndroid Build Coastguard Worker '*_test.py'], 34*c8dee2aaSAndroid Build Coastguard Worker INFRA_BOTS_DIR) 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Workerdef recipe_test(train): 38*c8dee2aaSAndroid Build Coastguard Worker recipes_cfg_path = os.path.join(SKIA_DIR, 'infra', 'config', 'recipes.cfg') 39*c8dee2aaSAndroid Build Coastguard Worker cmd = [ 40*c8dee2aaSAndroid Build Coastguard Worker sys.executable, '-u', os.path.join(INFRA_BOTS_DIR, 'recipes.py'), 41*c8dee2aaSAndroid Build Coastguard Worker '--package', recipes_cfg_path, 'test', 42*c8dee2aaSAndroid Build Coastguard Worker ] 43*c8dee2aaSAndroid Build Coastguard Worker if train: 44*c8dee2aaSAndroid Build Coastguard Worker cmd.append('train') 45*c8dee2aaSAndroid Build Coastguard Worker else: 46*c8dee2aaSAndroid Build Coastguard Worker cmd.append('run') 47*c8dee2aaSAndroid Build Coastguard Worker return test(cmd, SKIA_DIR) 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Workerdef gen_tasks_test(train): 51*c8dee2aaSAndroid Build Coastguard Worker cmd = ['go', 'run', 'gen_tasks.go'] 52*c8dee2aaSAndroid Build Coastguard Worker if not train: 53*c8dee2aaSAndroid Build Coastguard Worker cmd.append('--test') 54*c8dee2aaSAndroid Build Coastguard Worker try: 55*c8dee2aaSAndroid Build Coastguard Worker output = test(cmd, INFRA_BOTS_DIR) 56*c8dee2aaSAndroid Build Coastguard Worker except OSError: 57*c8dee2aaSAndroid Build Coastguard Worker return ('Failed to run "%s"; do you have Go installed on your machine?' 58*c8dee2aaSAndroid Build Coastguard Worker % ' '.join(cmd)) 59*c8dee2aaSAndroid Build Coastguard Worker return output 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Workerdef main(): 63*c8dee2aaSAndroid Build Coastguard Worker train = False 64*c8dee2aaSAndroid Build Coastguard Worker if '--train' in sys.argv: 65*c8dee2aaSAndroid Build Coastguard Worker train = True 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker tests = ( 68*c8dee2aaSAndroid Build Coastguard Worker python_unit_tests, 69*c8dee2aaSAndroid Build Coastguard Worker recipe_test, 70*c8dee2aaSAndroid Build Coastguard Worker gen_tasks_test, 71*c8dee2aaSAndroid Build Coastguard Worker ) 72*c8dee2aaSAndroid Build Coastguard Worker errs = [] 73*c8dee2aaSAndroid Build Coastguard Worker for t in tests: 74*c8dee2aaSAndroid Build Coastguard Worker err = t(train) 75*c8dee2aaSAndroid Build Coastguard Worker if err: 76*c8dee2aaSAndroid Build Coastguard Worker errs.append(err) 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker if len(errs) > 0: 79*c8dee2aaSAndroid Build Coastguard Worker print('Test failures:\n', file=sys.stderr) 80*c8dee2aaSAndroid Build Coastguard Worker for err in errs: 81*c8dee2aaSAndroid Build Coastguard Worker print('==============================', file=sys.stderr) 82*c8dee2aaSAndroid Build Coastguard Worker print(err, file=sys.stderr) 83*c8dee2aaSAndroid Build Coastguard Worker print('==============================', file=sys.stderr) 84*c8dee2aaSAndroid Build Coastguard Worker sys.exit(1) 85*c8dee2aaSAndroid Build Coastguard Worker 86*c8dee2aaSAndroid Build Coastguard Worker if train: 87*c8dee2aaSAndroid Build Coastguard Worker print('Trained tests successfully.') 88*c8dee2aaSAndroid Build Coastguard Worker else: 89*c8dee2aaSAndroid Build Coastguard Worker print('All tests passed!') 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__': 93*c8dee2aaSAndroid Build Coastguard Worker main() 94