summaryrefslogtreecommitdiffstats
path: root/python/mozperftest/mozperftest/tests/test_androidlog.py
blob: b7aa56b70410fe60963a96052ed03f226a499f2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/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()