xref: /aosp_15_r20/external/skia/infra/bots/infra_tests.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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