tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

mach_test_package_commands.py (3495B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 import os
      6 import sys
      7 from argparse import Namespace
      8 
      9 from mach.decorators import Command
     10 
     11 here = os.path.abspath(os.path.dirname(__file__))
     12 parser = None
     13 logger = None
     14 
     15 
     16 def run_gtest(context, **kwargs):
     17    from mozlog.commandline import setup_logging
     18 
     19    if not kwargs.get("log"):
     20        kwargs["log"] = setup_logging("gtest", kwargs, {"mach": sys.stdout})
     21    global logger
     22    logger = kwargs["log"]
     23 
     24    args = Namespace(**kwargs)
     25 
     26    import mozinfo
     27 
     28    if mozinfo.info.get("buildapp") == "mobile/android":
     29        return run_gtest_android(context, args)
     30    return run_gtest_desktop(context, args)
     31 
     32 
     33 def run_gtest_desktop(context, args):
     34    prog = context.firefox_bin
     35    xre_path = os.path.dirname(context.firefox_bin)
     36    if sys.platform == "darwin":
     37        xre_path = os.path.join(xre_path, "Resources")
     38    utility_path = context.bin_dir
     39    cwd = os.path.join(context.package_root, "gtest")
     40 
     41    logger.info(
     42        "mach calling run_gtest with prog=%s xre_path=%s cwd=%s utility_path=%s"
     43        % (prog, xre_path, cwd, utility_path)
     44    )
     45    # The gtest option parser ignores some options normally passed to the mozharness
     46    # command, so some hacking is required, for now:
     47    extra_args = [arg for arg in args.args if not arg.startswith("-")]
     48    if extra_args:
     49        os.environ["GTEST_FILTER"] = extra_args[0]
     50        logger.info("GTEST_FILTER=%s" % extra_args[0])
     51 
     52    import rungtests
     53 
     54    tester = rungtests.GTests()
     55    return tester.run_gtest(prog, xre_path, cwd, utility_path=utility_path)
     56 
     57 
     58 def run_gtest_android(context, args):
     59    config = context.mozharness_config
     60    if config:
     61        args.adb_path = config["exes"]["adb"] % {
     62            "abs_work_dir": context.mozharness_workdir
     63        }
     64    cwd = os.path.join(context.package_root, "gtest")
     65    libxul_path = os.path.join(cwd, "gtest_bin", "gtest", "libxul.so")
     66 
     67    logger.info(
     68        "mach calling android run_gtest with package=%s cwd=%s libxul=%s"
     69        % (args.package, cwd, libxul_path)
     70    )
     71    # The remote gtest option parser ignores some options normally passed to the mozharness
     72    # command, so some hacking is required, for now:
     73    extra_args = [arg for arg in args.args if not arg.startswith("-")]
     74    test_filter = extra_args[0] if extra_args else None
     75    logger.info("test filter=%s" % test_filter)
     76 
     77    import remotegtests
     78 
     79    tester = remotegtests.RemoteGTests()
     80    return tester.run_gtest(
     81        cwd,
     82        args.shuffle,
     83        test_filter,
     84        args.package,
     85        args.adb_path,
     86        args.device_serial,
     87        args.remote_test_root,
     88        libxul_path,
     89        args.symbols_path,
     90    )
     91 
     92 
     93 def setup_argument_parser():
     94    import mozinfo
     95 
     96    mozinfo.find_and_update_from_json(here)
     97    global parser
     98    if mozinfo.info.get("buildapp") == "mobile/android":
     99        import remotegtests
    100 
    101        parser = remotegtests.remoteGtestOptions()
    102    else:
    103        import rungtests
    104 
    105        parser = rungtests.gtestOptions()
    106    return parser
    107 
    108 
    109 @Command(
    110    "gtest",
    111    category="testing",
    112    description="Run the gtest harness.",
    113    parser=setup_argument_parser,
    114 )
    115 def gtest(command_context, **kwargs):
    116    command_context._mach_context.activate_mozharness_venv()
    117    result = run_gtest(command_context._mach_context, **kwargs)
    118    return 0 if result else 1