Home | History | Annotate | Download | only in tracing
      1 #!/usr/bin/env python
      2 # Copyright (c) 2015 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import argparse
      7 import logging
      8 import os
      9 import subprocess
     10 import sys
     11 
     12 
     13 _RUN_PY_TESTS_DIR = os.path.join(os.path.dirname(__file__), 'run_py_tests')
     14 _RUN_D8_TESTS_DIR = os.path.join(os.path.dirname(__file__), 'run_d8_tests')
     15 _RUN_DEV_SERVER_DIR = os.path.join(os.path.dirname(__file__), 'run_dev_server')
     16 
     17 
     18 class bcolors(object):
     19     HEADER = '\033[95m'
     20     OKBLUE = '\033[94m'
     21     OKGREEN = '\033[92m'
     22     WARNING = '\033[93m'
     23     FAIL = '\033[91m'
     24     ENDC = '\033[0m'
     25     BOLD = '\033[1m'
     26     UNDERLINE = '\033[4m'
     27 
     28 
     29 def _RunPyTests():
     30   return subprocess.call([_RUN_PY_TESTS_DIR])
     31 
     32 
     33 def _RunD8Tests():
     34   return subprocess.call([_RUN_D8_TESTS_DIR])
     35 
     36 
     37 def _RunDevServer(chrome_command):
     38   if (sys.platform.startswith('linux') and os.getenv('DISPLAY') is None):
     39     logging.warning(
     40       'Browser found but cannot run browser tests because you do not have a '
     41       'DISPLAY environment set.')
     42     return 0
     43   args = [
     44     chrome_command, '--no-sandbox', '--no-experiments', '--no-first-run',
     45     '--noerrdialogs',
     46     'http://localhost:8003/base/tests.html?headless=true&testTypeToRun=all']
     47   chrome_proc = subprocess.Popen(args)
     48   exit_code = subprocess.call([_RUN_DEV_SERVER_DIR])
     49   chrome_proc.terminate()
     50   if chrome_proc.poll() is None:
     51     chrome_proc.kill()
     52   return exit_code
     53 
     54 
     55 def _TryGettingChromeCommand():
     56   if sys.platform.startswith('darwin'):  # Mac
     57     chrome_path = (
     58       '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')
     59     if os.path.isfile(chrome_path):
     60       return chrome_path
     61   elif sys.platform.startswith('linux'):
     62     found = False
     63     try:
     64       with open(os.devnull, 'w') as devnull:
     65         found = subprocess.call(['google-chrome', '--version'],
     66                                 stdout=devnull, stderr=devnull) == 0
     67     except OSError:
     68       pass
     69     if found:
     70       return 'google-chrome'
     71   # TODO(nedn): Find the default path to chrome on win platform.
     72   return None
     73 
     74 
     75 if __name__ == '__main__':
     76   parser = argparse.ArgumentParser(
     77       description='Run all tests of tracing project.')
     78   parser.add_argument('--chrome_path', type=str,
     79                       help='Path to Chrome browser binary.')
     80   args = parser.parse_args()
     81   chrome_command = args.chrome_path
     82   if not chrome_command:
     83     chrome_command = _TryGettingChromeCommand()
     84 
     85   run_py_tests_exit_code = _RunPyTests()
     86   run_d8_tests_exit_code = _RunD8Tests()
     87   if chrome_command:
     88     run_dev_server_exit_code = _RunDevServer(chrome_command)
     89   else:
     90     logging.warning(
     91       'Could not run browser tests because chrome is missing.')
     92     run_dev_server_exit_code = 0
     93 
     94   exit_code = (run_py_tests_exit_code | run_dev_server_exit_code |
     95                run_d8_tests_exit_code)
     96   if exit_code:
     97     print (bcolors.FAIL +
     98            'Oooops! Looks like some of your tests have failed.' +
     99            bcolors.ENDC), u'\U0001F631'.encode('utf-8')
    100   else:
    101     print (bcolors.OKGREEN +
    102            'Woho! All the tests have passed. You are awesome!' +
    103            bcolors.ENDC), u'\U0001F601'.encode('utf-8')
    104 
    105   if run_py_tests_exit_code:
    106     sys.stderr.write(
    107       'run_py_tests have some failed tests. Rerun run_py_tests script '
    108       'to see those.\n')
    109   if run_d8_tests_exit_code:
    110     sys.stderr.write(
    111       'run_d8_tests have some failed tests. Rerun run_d8_tests script '
    112       'to see those.\n')
    113   if run_dev_server_exit_code:
    114     sys.stderr.write(
    115       'run_dev_server have some failed tests. Rerun run_dev_server script '
    116       'and open the browser to see those.\n')
    117 
    118   sys.exit(exit_code)
    119