Source code

Revision control

Copy as Markdown

Other Tools

#!/usr/bin/env python
import pathlib
from unittest import mock
import mozunit
from mozperftest.environment import METRICS, SYSTEM, TEST
from mozperftest.tests.support import EXAMPLE_TEST, get_running_env, temp_file
from mozperftest.utils import temp_dir
HERE = pathlib.Path(__file__).parent
LOGCAT = HERE / "data" / "logcat"
def fetch(self, url):
return str(HERE / "fetched_artifact.zip")
class FakeDevice:
def __init__(self, **args):
self.apps = []
def uninstall_app(self, apk_name):
return True
def install_app(self, apk, replace=True):
if apk not in self.apps:
self.apps.append(apk)
def is_app_installed(self, app_name):
return True
def get_logcat(self):
with LOGCAT.open() as f:
for line in f:
yield line
@mock.patch("mozperftest.test.browsertime.runner.install_package")
@mock.patch(
"mozperftest.test.noderunner.NodeRunner.verify_node_install", new=lambda x: True
)
@mock.patch("mozbuild.artifact_cache.ArtifactCache.fetch", new=fetch)
@mock.patch(
"mozperftest.test.browsertime.runner.BrowsertimeRunner._setup_node_packages",
new=lambda x, y: None,
)
@mock.patch("mozperftest.system.android.ADBLoggedDevice", new=FakeDevice)
def test_android_log(*mocked):
with temp_file() as logcat, temp_dir() as output:
args = {
"flavor": "mobile-browser",
"android-install-apk": ["this.apk"],
"android": True,
"console": True,
"android-timeout": 30,
"android-capture-adb": "stdout",
"android-capture-logcat": logcat,
"android-app-name": "org.mozilla.fenix",
"androidlog": True,
"output": output,
"browsertime-no-window-recorder": False,
"browsertime-viewport-size": "1234x567",
"tests": [EXAMPLE_TEST],
}
mach_cmd, metadata, env = get_running_env(**args)
with env.layers[SYSTEM] as sys, env.layers[TEST] as andro:
metadata = andro(sys(metadata))
# we want to drop the first result
metadata._results = metadata._results[1:]
with env.layers[METRICS] as metrics:
metadata = metrics(metadata)
assert pathlib.Path(output, "LogCatstd-output.json").exists()
if __name__ == "__main__":
mozunit.main()