"""Test driver for integration tests of Chrome's mini_installer.
The most simple way to run these tests is from the context of a build output
directory (e.g., src\out\Rel).
"""
import argparse
import os
import sys
CUR_DIR = os.path.dirname(os.path.realpath(__file__))
SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(CUR_DIR)))
TYP_DIR = os.path.join(SRC_DIR, 'third_party', 'catapult', 'third_party',
'typ')
if TYP_DIR not in sys.path:
sys.path.insert(0, TYP_DIR)
del SRC_DIR, TYP_DIR
import typ
from argument_parser import ArgumentParser
def _prepare_env_for_subprocesses(parser, args):
"""Populates environment variables with values given to this process on its
command line.
typ runs tests in child processes. It does not pass args defined by this
test suite, so here we stuff the args the suite cares about into the
environment so they can be pulled out by test modules that need them.
Args:
parser: The ArgumentParser used for this process.
args: The arguments parsed from this process's command line.
"""
if args.force_clean:
os.environ['CMI_FORCE_CLEAN'] = '1'
if args.output_dir != parser.get_default('output_dir'):
os.environ['CMI_OUTPUT_DIR'] = args.output_dir
if args.installer_path != parser.get_default('installer_path'):
os.environ['CMI_INSTALLER_PATH'] = args.installer_path
if args.previous_version_installer_path != parser.get_default(
'previous_version_installer_path'):
os.environ['CMI_PREVIOUS_VERSION_INSTALLER_PATH'] = \
args.previous_version_installer_path
if args.chromedriver_path != parser.get_default('chromedriver_path'):
os.environ['CMI_CHROMEDRIVER_PATH'] = args.chromedriver_path
if args.config != parser.get_default('config'):
os.environ['CMI_CONFIG'] = args.config
def main(args):
host = typ.Host()
runner = typ.Runner(host)
parser = ArgumentParser(host)
parser.prog = os.path.basename(sys.argv[0])
parser.description = __doc__
parser.formatter_class = argparse.RawDescriptionHelpFormatter
runner.parse_args(
parser=parser,
argv=args,
isolate=['installer_test.*'],
top_level_dir=CUR_DIR,
retry_limit=3,
)
if parser.exit_status is not None:
return parser.exit_status
_prepare_env_for_subprocesses(parser, runner.args)
try:
return runner.run()[0]
except KeyboardInterrupt:
sys.stderr.write("interrupted, exiting")
return 130
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))