forked from mirrors/gecko-dev
The cookie prompt handling code was initially added under `test_cmds` but it got in conflict with the interactive sites code (the prompts are for pageload sites while the interactive sites are a different type). This patch is adding a new section in the json that is specially for handling the cookie prompts for pageload sites. We have to handle prompts for the login sites. but we don't currently encounter those prompts on CI and locally the login code doesn't work ATM. So this affects local site recording from Europe. Differential Revision: https://phabricator.services.mozilla.com/D153748
166 lines
5.5 KiB
Python
166 lines
5.5 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
from __future__ import absolute_import
|
|
|
|
import json
|
|
import os
|
|
import platform
|
|
from pathlib import Path
|
|
|
|
from mozperftest.test.browsertime import add_options, add_option
|
|
|
|
options = [
|
|
("pageCompleteWaitTime", "10000"),
|
|
]
|
|
|
|
next_site = None
|
|
|
|
RECORDING_LIST = Path(Path(__file__).parent, "pageload_sites.json")
|
|
|
|
SCM_1_LOGIN_SITES = ("facebook", "netflix")
|
|
|
|
|
|
def before_iterations(kw):
|
|
|
|
global next_site
|
|
print("Setting up next site to record.")
|
|
|
|
with RECORDING_LIST.open() as f:
|
|
site_list = json.load(f)
|
|
# currently can't record websites that require user interactions(Logins)
|
|
if kw.get("android"):
|
|
site_list = site_list["mobile"]
|
|
else:
|
|
site_list = site_list["desktop"]
|
|
|
|
def __should_record(test):
|
|
# If a test page selection was provided, only select those
|
|
# tests and exclude all the others
|
|
specified_tests = kw["proxy_perftest_page"]
|
|
if specified_tests is not None:
|
|
if test.get("name") in specified_tests:
|
|
if test.get("login"):
|
|
print(f"WARNING: You selected a login test: {test.get('name')}")
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
# Only perform login recordings in automation or when
|
|
# RAPTOR_LOGINS is defined
|
|
record = False
|
|
if not test.get("login") or test.get("login-test"):
|
|
record = True
|
|
if not (
|
|
"MOZ_AUTOMATION" in os.environ or "RAPTOR_LOGINS" in os.environ
|
|
) and test.get("login-test"):
|
|
record = False
|
|
print(
|
|
f"Skipping login test `{test.get('name')}` "
|
|
f"because login info cannot be obtained."
|
|
)
|
|
|
|
# When pushing to Try, only attempt login recording using the
|
|
# taskcluster secrets that are associated with SCM level 1 as defined
|
|
# in `SCM_LVL_1_SITES`.
|
|
if test.get("login"):
|
|
if "MOZ_AUTOMATION" in os.environ.keys():
|
|
if (
|
|
os.environ.get("MOZ_SCM_LEVEL") == 1
|
|
and test.get("name") not in SCM_1_LOGIN_SITES
|
|
):
|
|
print(
|
|
f"Skipping login test `{test.get('name')}` "
|
|
f"Because SCM = `{os.environ.get('MOZ_SCM_LEVEL') }`"
|
|
f"and there is no secret available at this level"
|
|
)
|
|
return False
|
|
return True
|
|
elif "RAPTOR_LOGINS" in os.environ:
|
|
# Leave it to the user to have properly set up a local json file with
|
|
# the login websites of interest
|
|
return True
|
|
|
|
return record
|
|
|
|
sites = [test_site for test_site in site_list if __should_record(test_site)]
|
|
|
|
if not sites:
|
|
raise Exception("No tests were selected for recording!")
|
|
|
|
def next_site():
|
|
for site in sites:
|
|
yield site
|
|
|
|
next_site = next_site()
|
|
|
|
# Set the number of test-iterations to the number of builds
|
|
kw["test_iterations"] = len(sites)
|
|
return kw
|
|
|
|
|
|
def before_runs(env):
|
|
global next_site
|
|
print("Running before_runs")
|
|
add_options(env, options)
|
|
|
|
if next_site:
|
|
test_site = next(next_site)
|
|
print("Next site: %s" % test_site)
|
|
|
|
if env.get_arg("android"):
|
|
platform_name = "android"
|
|
app_name = env.get_arg("android-app-name").split(".")[-1]
|
|
else:
|
|
platform_name = platform.system().lower()
|
|
app_name = "firefox"
|
|
|
|
name = [
|
|
"mitm7",
|
|
platform_name,
|
|
"gve" if app_name == "geckoview_example" else app_name,
|
|
test_site["name"],
|
|
]
|
|
|
|
recording_file = "%s.zip" % "-".join(name)
|
|
|
|
env.set_arg("proxy-mode", "record")
|
|
env.set_arg(
|
|
"proxy-file",
|
|
recording_file,
|
|
)
|
|
|
|
add_option(env, "browsertime.url", test_site.get("test_url"), overwrite=True)
|
|
add_option(env, "browsertime.screenshot", "true")
|
|
add_option(env, "browsertime.testName", test_site.get("name"))
|
|
add_option(env, "browsertime.testType", test_site.get("type", "pageload"))
|
|
add_option(env, "browsertime.login", test_site.get("login", "false"))
|
|
|
|
prefs = test_site.get("preferences", {})
|
|
for pref, val in prefs.items():
|
|
add_option(env, "firefox.preference", f"{pref}:{val}")
|
|
|
|
second_url = test_site.get("secondary_url", None)
|
|
if second_url:
|
|
add_option(env, "browsertime.secondary_url", second_url)
|
|
|
|
inject_deterministic = test_site.get("inject_deterministic", True)
|
|
env.set_arg("proxy-deterministic", inject_deterministic)
|
|
|
|
dismiss_cookie_prompt = test_site.get("dismiss_cookie_prompt", [])
|
|
if dismiss_cookie_prompt:
|
|
parsed_cmds = [
|
|
":::".join([str(i) for i in item])
|
|
for item in dismiss_cookie_prompt
|
|
if item
|
|
]
|
|
add_option(
|
|
env, "browsertime.dismiss_cookie_prompt", ";;;".join(parsed_cmds)
|
|
)
|
|
|
|
cmds = test_site.get("test_cmds", [])
|
|
if cmds:
|
|
parsed_cmds = [":::".join([str(i) for i in item]) for item in cmds if item]
|
|
add_option(env, "browsertime.commands", ";;;".join(parsed_cmds))
|
|
|
|
print("Recording %s to file: %s" % (test_site.get("test_url"), recording_file))
|