diff options
Diffstat (limited to 'python/mozperftest/mozperftest/tests/support.py')
-rw-r--r-- | python/mozperftest/mozperftest/tests/support.py | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/python/mozperftest/mozperftest/tests/support.py b/python/mozperftest/mozperftest/tests/support.py new file mode 100644 index 0000000000..4df5823d43 --- /dev/null +++ b/python/mozperftest/mozperftest/tests/support.py @@ -0,0 +1,120 @@ +import contextlib +import os +import shutil +import subprocess +import sys +import tempfile +from pathlib import Path +from unittest.mock import MagicMock + +from mozperftest import utils +from mozperftest.environment import MachEnvironment +from mozperftest.hooks import Hooks +from mozperftest.metadata import Metadata +from mozperftest.script import ScriptInfo + +HERE = Path(__file__).parent +ROOT = Path(HERE, "..", "..", "..", "..").resolve() +EXAMPLE_TESTS_DIR = os.path.join(HERE, "data", "samples") +EXAMPLE_TEST = os.path.join(EXAMPLE_TESTS_DIR, "perftest_example.js") +EXAMPLE_XPCSHELL_TEST = Path(EXAMPLE_TESTS_DIR, "test_xpcshell.js") +EXAMPLE_XPCSHELL_TEST2 = Path(EXAMPLE_TESTS_DIR, "test_xpcshell_flavor2.js") +EXAMPLE_WPT_TEST = Path(EXAMPLE_TESTS_DIR, "test_perftest_WPT_init_file.js") +BT_DATA = Path(HERE, "data", "browsertime-results", "browsertime.json") +BT_DATA_VIDEO = Path(HERE, "data", "browsertime-results-video", "browsertime.json") +DMG = Path(HERE, "data", "firefox.dmg") +MOZINFO = Path(HERE, "data", "mozinfo.json") +EXAMPLE_ANDROID_STARTUP_TEST = Path( + EXAMPLE_TESTS_DIR, "test_perftest_android_startup.js" +) + + +@contextlib.contextmanager +def temp_file(name="temp", content=None): + tempdir = tempfile.mkdtemp() + path = os.path.join(tempdir, name) + if content is not None: + with open(path, "w") as f: + f.write(content) + try: + yield path + finally: + shutil.rmtree(tempdir) + + +def get_running_env(**kwargs): + from mozbuild.base import MozbuildObject + + config = MozbuildObject.from_environment() + mach_cmd = MagicMock() + + def get_binary_path(*args): + return "" + + def run_pip(args): + subprocess.check_call( + [sys.executable, "-m", "pip"] + args, + stderr=subprocess.STDOUT, + cwd=config.topsrcdir, + universal_newlines=True, + ) + + mach_cmd.get_binary_path = get_binary_path + mach_cmd.topsrcdir = config.topsrcdir + mach_cmd.topobjdir = config.topobjdir + mach_cmd.distdir = config.distdir + mach_cmd.bindir = config.bindir + mach_cmd._mach_context = MagicMock() + mach_cmd._mach_context.state_dir = tempfile.mkdtemp() + mach_cmd.run_process.return_value = 0 + mach_cmd.virtualenv_manager = MagicMock() + mach_cmd.virtualenv_manager.python_path = sys.executable + mach_cmd.virtualenv_manager.bin_path = Path(sys.executable).parent + mach_cmd.virtualenv_manager._run_pip = run_pip + + mach_args = { + "flavor": "desktop-browser", + "test_objects": None, + "resolve_tests": True, + "browsertime-clobber": False, + "browsertime-install-url": None, + } + mach_args.update(kwargs) + hooks = Hooks(mach_cmd, mach_args.pop("hooks", None)) + tests = mach_args.get("tests", []) + if len(tests) > 0: + script = ScriptInfo(tests[0]) + else: + script = None + env = MachEnvironment(mach_cmd, hooks=hooks, **mach_args) + metadata = Metadata(mach_cmd, env, "desktop-browser", script) + return mach_cmd, metadata, env + + +def requests_content(chunks=None): + if chunks is None: + chunks = [b"some ", b"content"] + + def _content(*args, **kw): + class Resp: + def iter_content(self, **kw): + for chunk in chunks: + yield chunk + + return Resp() + + return _content + + +@contextlib.contextmanager +def running_on_try(on_try=True): + old = utils.ON_TRY + utils.ON_TRY = on_try + try: + if on_try: + with utils.temporary_env(MOZ_AUTOMATION="1"): + yield + else: + yield + finally: + utils.ON_TRY = old |