示例#1
0
def test_get_raptor_test_list_override_page_timeout(create_args):
    args = create_args(test="amazon", page_timeout=9999, browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0]["page_timeout"] == 9999
示例#2
0
def main(args=sys.argv[1:]):
    args = parse_args()
    commandline.setup_logging('raptor', args, {'tbpl': sys.stdout})
    LOG = get_default_logger(component='raptor-main')

    LOG.info("received command line arguments: %s" % str(args))

    # if a test name specified on command line, and it exists, just run that one
    # otherwise run all available raptor tests that are found for this browser
    raptor_test_list = get_raptor_test_list(args)

    # ensure we have at least one valid test to run
    if len(raptor_test_list) == 0:
        LOG.critical("abort: no tests found")
        sys.exit(1)

    LOG.info("raptor tests scheduled to run:")
    for next_test in raptor_test_list:
        LOG.info(next_test['name'])

    raptor = Raptor(args.app, args.binary, args.run_local, args.obj_path)

    raptor.start_control_server()

    for next_test in raptor_test_list:
        raptor.run_test(next_test)

    success = raptor.process_results()
    raptor.clean_up()

    if not success:
        # didn't get test results; test timed out or crashed, etc. we want job to fail
        LOG.critical("error: no raptor test results were found")
        os.sys.exit(1)
示例#3
0
def test_get_raptor_test_list_chrome(create_args):
    args = create_args(app="chrome",
                       test="raptor-speedometer")

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-speedometer-chrome'
示例#4
0
def main(args=sys.argv[1:]):
    args = parse_args()
    commandline.setup_logging('raptor', args, {'tbpl': sys.stdout})
    LOG = get_default_logger(component='raptor-main')

    # if a test name specified on command line, and it exists, just run that one
    # otherwise run all available raptor tests that are found for this browser
    raptor_test_list = get_raptor_test_list(args)

    # ensure we have at least one valid test to run
    if len(raptor_test_list) == 0:
        LOG.critical("abort: no tests found")
        sys.exit(1)

    LOG.info("raptor tests scheduled to run:")
    for next_test in raptor_test_list:
        LOG.info(next_test['name'])

    raptor = Raptor(args.app, args.binary)

    raptor.start_control_server()

    for next_test in raptor_test_list:
        raptor.run_test(next_test)

    raptor.process_results()
    raptor.clean_up()
示例#5
0
def test_get_raptor_test_list_geckoview(create_args):
    args = create_args(app="geckoview",
                       test="raptor-unity-webgl")

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-unity-webgl-geckoview'
示例#6
0
def test_get_raptor_test_list_override_page_timeout(create_args):
    args = create_args(test="raptor-tp6-google-firefox", page_timeout=9999)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    assert test_list[0]['page_timeout'] == 9999
示例#7
0
def test_get_raptor_test_list_using_live_sites(create_args):
    args = create_args(test="amazon", live_sites=True, browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0]["use_live_sites"] == "true"
    assert test_list[0]["playback"] is None
示例#8
0
def test_get_raptor_test_list_refbrow(create_args):
    args = create_args(app="refbrow",
                       test="raptor-speedometer",
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-speedometer-refbrow'
示例#9
0
def test_get_raptor_test_list_fenix(create_args):
    args = create_args(app="fenix",
                       test="raptor-speedometer",
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    # we don't have any actual fenix tests yet
    assert len(test_list) == 0
示例#10
0
def test_get_raptor_test_list_chrome(create_args):
    args = create_args(app="chrome",
                       test="raptor-speedometer",
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "raptor-speedometer-chrome"
示例#11
0
def test_get_raptor_test_list_gecko_profiling(create_args):
    args = create_args(test="raptor-tp6-google-firefox", gecko_profile=True)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    assert test_list[0]['gecko_profile'] is True
    assert test_list[0]['page_cycles'] == 3
示例#12
0
def test_get_raptor_test_list_debug_mode(create_args):
    args = create_args(test="raptor-tp6-google-firefox", debug_mode=True)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    assert test_list[0]['debug_mode'] is True
    assert test_list[0]['page_cycles'] == 2
示例#13
0
def test_get_raptor_test_list_add_test_url_params(create_args):
    args = create_args(test="amazon", test_url_params="c=4", browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    query_params = parse_qs(urlsplit(test_list[0]["test_url"]).query)
    assert query_params.get("c") == ["4"]
示例#14
0
def test_get_raptor_test_list_debug_mode(create_args):
    args = create_args(test="amazon", debug_mode=True, browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0]["debug_mode"] is True
    assert test_list[0]["page_cycles"] == 2
示例#15
0
def test_get_raptor_test_list_override_page_cycles(create_args):
    args = create_args(test="raptor-tp6-google-firefox",
                       page_cycles=99,
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "raptor-tp6-google-firefox"
    assert test_list[0]["page_cycles"] == 99
示例#16
0
def test_get_raptor_test_list_add_test_url_params(create_args):
    args = create_args(test="raptor-tp6-google-firefox",
                       test_url_params='c=4',
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    query_params = parse_qs(urlsplit(test_list[0]['test_url']).query)
    assert query_params.get('c') == ['4']
示例#17
0
def test_get_raptor_test_list_using_live_sites(create_args):
    args = create_args(test="raptor-tp6-amazon-firefox",
                       live_sites=True,
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-amazon-firefox'
    assert test_list[0]['use_live_sites'] == 'true'
    assert test_list[0]['playback'] is None
示例#18
0
def test_get_raptor_test_list_gecko_profiling_enabled(create_args):
    args = create_args(test="amazon", gecko_profile=True, browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0]["gecko_profile"] is True
    assert test_list[0].get("gecko_profile_entries") == "14000000"
    assert test_list[0].get("gecko_profile_interval") == "1"
    assert test_list[0].get("gecko_profile_threads") is None
示例#19
0
def test_get_raptor_test_list_firefox(create_args):
    args = create_args()

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 4

    subtests = ['raptor-tp6-google-firefox', 'raptor-tp6-amazon-firefox',
                'raptor-tp6-facebook-firefox', 'raptor-tp6-youtube-firefox']

    for next_subtest in test_list:
        assert next_subtest['name'] in subtests
示例#20
0
def test_get_raptor_test_list_gecko_profiling_enabled(create_args):
    args = create_args(test="raptor-tp6-google-firefox",
                       gecko_profile=True,
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    assert test_list[0]['gecko_profile'] is True
    assert test_list[0].get('gecko_profile_entries') == '14000000'
    assert test_list[0].get('gecko_profile_interval') == '1'
    assert test_list[0].get('gecko_profile_threads') is None
示例#21
0
def main(args=sys.argv[1:]):
    args = parse_args()
    commandline.setup_logging('raptor', args, {'tbpl': sys.stdout})
    LOG = get_default_logger(component='raptor-main')

    LOG.info("raptor-start")
    LOG.info("received command line arguments: %s" % str(args))

    # if a test name specified on command line, and it exists, just run that one
    # otherwise run all available raptor tests that are found for this browser
    raptor_test_list = get_raptor_test_list(args, mozinfo.os)

    # ensure we have at least one valid test to run
    if len(raptor_test_list) == 0:
        LOG.critical("abort: no tests found")
        sys.exit(1)

    LOG.info("raptor tests scheduled to run:")
    for next_test in raptor_test_list:
        LOG.info(next_test['name'])

    raptor = Raptor(args.app, args.binary, args.run_local, args.obj_path,
                    args.gecko_profile, args.gecko_profile_interval,
                    args.gecko_profile_entries, args.symbols_path)

    raptor.start_control_server()

    for next_test in raptor_test_list:
        if 'page_timeout' not in next_test.keys():
            next_test['page_timeout'] = 120000
        if 'page_cycles' not in next_test.keys():
            next_test['page_cycles'] = 1
        raptor.run_test(next_test, timeout=int(next_test['page_timeout']))

    success = raptor.process_results()
    raptor.clean_up()

    if not success:
        # didn't get test results; test timed out or crashed, etc. we want job to fail
        LOG.critical("TEST-UNEXPECTED-FAIL: no raptor test results were found")
        os.sys.exit(1)

    # if we have results but one test page timed out (i.e. one tp6 test page didn't load
    # but others did) we still dumped PERFHERDER_DATA for the successfull pages but we
    # want the overall test job to marked as a failure
    pages_that_timed_out = raptor.get_page_timeout_list()
    if len(pages_that_timed_out) > 0:
        for _page in pages_that_timed_out:
            LOG.critical(
                "TEST-UNEXPECTED-FAIL: test '%s' timed out loading test page: %s"
                % (_page['test_name'], _page['url']))
        os.sys.exit(1)
示例#22
0
def test_get_raptor_test_list_gecko_profiling_disabled(create_args):
    args = create_args(test="raptor-tp6-google-firefox",
                       gecko_profile=False,
                       gecko_profile_entries=42,
                       gecko_profile_interval=100,
                       gecko_profile_threads=['Foo'],
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    assert test_list[0].get('gecko_profile') is None
    assert test_list[0].get('gecko_profile_entries') is None
    assert test_list[0].get('gecko_profile_interval') is None
    assert test_list[0].get('gecko_profile_threads') is None
示例#23
0
def test_get_raptor_test_list_gecko_profiling_enabled_args_override(create_args):
    args = create_args(test="raptor-tp6-google-firefox",
                       gecko_profile=True,
                       gecko_profile_entries=42,
                       gecko_profile_interval=100,
                       gecko_profile_threads=['Foo'],
                       browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]['name'] == 'raptor-tp6-google-firefox'
    assert test_list[0]['gecko_profile'] is True
    assert test_list[0]['gecko_profile_entries'] == '42'
    assert test_list[0]['gecko_profile_interval'] == '100'
    assert test_list[0]['gecko_profile_threads'] == 'Foo'
示例#24
0
def test_get_raptor_test_list_firefox(create_args):
    args = create_args(browser_cycles=1)

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 4

    subtests = [
        "raptor-tp6-unittest-google-firefox",
        "raptor-tp6-unittest-amazon-firefox",
        "raptor-tp6-unittest-facebook-firefox",
        "raptor-tp6-unittest-youtube-firefox",
    ]

    for next_subtest in test_list:
        assert next_subtest["name"] in subtests
示例#25
0
def test_get_raptor_test_list_gecko_profiling_disabled(create_args):
    args = create_args(
        test="raptor-tp6-google-firefox",
        gecko_profile=False,
        gecko_profile_entries=42,
        gecko_profile_interval=100,
        gecko_profile_threads=["Foo"],
        browser_cycles=1,
    )

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "raptor-tp6-google-firefox"
    assert test_list[0].get("gecko_profile") is None
    assert test_list[0].get("gecko_profile_entries") is None
    assert test_list[0].get("gecko_profile_interval") is None
    assert test_list[0].get("gecko_profile_threads") is None
示例#26
0
def test_get_raptor_test_list_gecko_profiling_enabled_args_override(
        create_args):
    args = create_args(
        test="raptor-tp6-google-firefox",
        gecko_profile=True,
        gecko_profile_entries=42,
        gecko_profile_interval=100,
        gecko_profile_threads=["Foo"],
        browser_cycles=1,
    )

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "raptor-tp6-google-firefox"
    assert test_list[0]["gecko_profile"] is True
    assert test_list[0]["gecko_profile_entries"] == "42"
    assert test_list[0]["gecko_profile_interval"] == "100"
    assert test_list[0]["gecko_profile_threads"] == "Foo"
示例#27
0
def test_get_raptor_test_list_gecko_profiling_enabled_extra_args_override(
        create_args):
    args = create_args(
        test="amazon",
        gecko_profile=True,
        gecko_profile_entries=42,
        gecko_profile_interval=100,
        gecko_profile_extra_threads=["Foo", "Oof"],
        gecko_profile_threads="String,Rope",
        browser_cycles=1,
    )

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0]["gecko_profile"] is True
    assert test_list[0]["gecko_profile_entries"] == "42"
    assert test_list[0]["gecko_profile_interval"] == "100"
    assert test_list[0]["gecko_profile_threads"] == "String,Rope,Foo,Oof"
示例#28
0
def test_get_raptor_test_list_gecko_profiling_enabled_args_override(
        create_args):
    args = create_args(
        test="amazon",
        gecko_profile=True,
        gecko_profile_entries=42,
        gecko_profile_interval=100,
        gecko_profile_threads="Foo",
        gecko_profile_features="Mood,UserNetWorth",
        browser_cycles=1,
    )

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0]["gecko_profile"] is True
    assert test_list[0]["gecko_profile_entries"] == "42"
    assert test_list[0]["gecko_profile_interval"] == "100"
    assert test_list[0]["gecko_profile_threads"] == "Foo"
    assert test_list[0]["gecko_profile_features"] == "Mood,UserNetWorth"
示例#29
0
def test_get_raptor_test_list_gecko_profiling_disabled_args_override(
        create_args):
    args = create_args(
        test="amazon",
        gecko_profile=False,
        gecko_profile_entries=42,
        gecko_profile_interval=100,
        gecko_profile_threads=["Foo"],
        gecko_profile_features=["Temperature"],
        browser_cycles=1,
    )

    test_list = get_raptor_test_list(args, mozinfo.os)
    assert len(test_list) == 1
    assert test_list[0]["name"] == "amazon"
    assert test_list[0].get("gecko_profile") is None
    assert test_list[0].get("gecko_profile_entries") is None
    assert test_list[0].get("gecko_profile_interval") is None
    assert test_list[0].get("gecko_profile_threads") is None
    assert test_list[0].get("gecko_profile_features") is None
示例#30
0
def main(args=sys.argv[1:]):
    args = parse_args()

    args.extra_prefs = parse_preferences(args.extra_prefs or [])

    if args.enable_fission:
        args.extra_prefs.update({
            "fission.autostart": True,
            "dom.serviceWorkers.parent_intercept": True,
            "browser.tabs.documentchannel": True,
        })

    if args.extra_prefs and args.extra_prefs.get("fission.autostart", False):
        args.enable_fission = True

    commandline.setup_logging("raptor", args, {"tbpl": sys.stdout})
    LOG.info("Python version: %s" % sys.version)
    LOG.info("raptor-start")

    if args.debug_mode:
        LOG.info("debug-mode enabled")

    LOG.info("received command line arguments: %s" % str(args))

    # if a test name specified on command line, and it exists, just run that one
    # otherwise run all available raptor tests that are found for this browser
    raptor_test_list = get_raptor_test_list(args, mozinfo.os)
    raptor_test_names = [
        raptor_test["name"] for raptor_test in raptor_test_list
    ]

    # ensure we have at least one valid test to run
    if len(raptor_test_list) == 0:
        LOG.critical("test '{}' could not be found for {}".format(
            args.test, args.app))
        sys.exit(1)

    LOG.info("raptor tests scheduled to run:")
    for next_test in raptor_test_list:
        LOG.info(next_test["name"])

    if not args.browsertime:
        if args.app == "firefox":
            raptor_class = WebExtensionFirefox
        elif args.app in CHROMIUM_DISTROS:
            raptor_class = WebExtensionDesktopChrome
        else:
            raptor_class = WebExtensionAndroid
    else:

        def raptor_class(*inner_args, **inner_kwargs):
            outer_kwargs = vars(args)
            # peel off arguments that are specific to browsertime
            for key in outer_kwargs.keys():
                if key.startswith("browsertime_"):
                    value = outer_kwargs.pop(key)
                    inner_kwargs[key] = value

            if args.app == "firefox" or args.app in CHROMIUM_DISTROS:
                klass = BrowsertimeDesktop
            else:
                klass = BrowsertimeAndroid

            return klass(*inner_args, **inner_kwargs)

    try:
        raptor = raptor_class(
            args.app,
            args.binary,
            run_local=args.run_local,
            noinstall=args.noinstall,
            installerpath=args.installerpath,
            obj_path=args.obj_path,
            gecko_profile=args.gecko_profile,
            gecko_profile_interval=args.gecko_profile_interval,
            gecko_profile_entries=args.gecko_profile_entries,
            symbols_path=args.symbols_path,
            host=args.host,
            power_test=args.power_test,
            cpu_test=args.cpu_test,
            memory_test=args.memory_test,
            live_sites=args.live_sites,
            cold=args.cold,
            is_release_build=args.is_release_build,
            debug_mode=args.debug_mode,
            post_startup_delay=args.post_startup_delay,
            activity=args.activity,
            intent=args.intent,
            interrupt_handler=SignalHandler(),
            enable_webrender=args.enable_webrender,
            extra_prefs=args.extra_prefs or {},
            device_name=args.device_name,
            no_conditioned_profile=args.no_conditioned_profile,
            disable_perf_tuning=args.disable_perf_tuning,
            conditioned_profile_scenario=args.conditioned_profile_scenario,
            chimera=args.chimera,
            project=args.project,
            verbose=args.verbose)
    except Exception:
        traceback.print_exc()
        LOG.critical(
            "TEST-UNEXPECTED-FAIL: could not initialize the raptor test runner"
        )
        os.sys.exit(1)

    success = raptor.run_tests(raptor_test_list, raptor_test_names)

    if not success:
        # if we have results but one test page timed out (i.e. one tp6 test page didn't load
        # but others did) we still dumped PERFHERDER_DATA for the successfull pages but we
        # want the overall test job to marked as a failure
        pages_that_timed_out = raptor.get_page_timeout_list()
        if pages_that_timed_out:
            for _page in pages_that_timed_out:
                message = [
                    ("TEST-UNEXPECTED-FAIL", "test '%s'" % _page["test_name"]),
                    ("timed out loading test page",
                     "waiting for pending metrics"),
                ]
                if _page.get("pending_metrics") is not None:
                    LOG.warning("page cycle {} has pending metrics: {}".format(
                        _page["page_cycle"], _page["pending_metrics"]))

                LOG.critical(" ".join("%s: %s" % (subject, msg)
                                      for subject, msg in message))
        else:
            # we want the job to fail when we didn't get any test results
            # (due to test timeout/crash/etc.)
            LOG.critical(
                "TEST-UNEXPECTED-FAIL: no raptor test results were found for %s"
                % ", ".join(raptor_test_names))
        os.sys.exit(1)

    # if we're running browsertime in the CI, we want to zip the result dir
    if args.browsertime and not args.run_local:
        result_dir = raptor.results_handler.result_dir()
        if os.path.exists(result_dir):
            LOG.info("Creating tarball at %s" % result_dir + ".tgz")
            with tarfile.open(result_dir + ".tgz", "w:gz") as tar:
                tar.add(result_dir, arcname=os.path.basename(result_dir))
            LOG.info("Removing %s" % result_dir)
            shutil.rmtree(result_dir)

    # when running raptor locally with gecko profiling on, use the view-gecko-profile
    # tool to automatically load the latest gecko profile in profiler.firefox.com
    if args.gecko_profile and args.run_local:
        if os.environ.get("DISABLE_PROFILE_LAUNCH", "0") == "1":
            LOG.info(
                "Not launching profiler.firefox.com because DISABLE_PROFILE_LAUNCH=1"
            )
        else:
            view_gecko_profile_from_raptor()