summaryrefslogtreecommitdiffstats
path: root/python/mozperftest/mozperftest/tests/test_logcat_transformer.py
blob: 8f94caedfc0c48e9bef179b76549131baa1adc3a (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env python
import mozunit
import pytest

from mozperftest.metrics.exceptions import (
    NotebookTransformError,
    NotebookTransformOptionsError,
)
from mozperftest.metrics.notebook.transforms.logcattime import LogCatTimeTransformer
from mozperftest.tests.support import HERE


@pytest.fixture(scope="session", autouse=True)
def tfm():
    yield LogCatTimeTransformer()


@pytest.fixture(scope="session", autouse=True)
def logcat_data(tfm):
    data = tfm.open_data(str(HERE / "data" / "home_activity.txt"))
    assert data
    yield data


def test_logcat_transform_two_regex(tfm, logcat_data):
    restart = r".*Activity.*Manager.*START.*org\.mozilla\.fennec_aurora/org\.mozilla\.fenix\.HomeActivity.*"  # noqa
    reend = r".*Displayed.*org\.mozilla\.fennec_aurora.*"
    opts = {
        "first-timestamp": restart,
        "second-timestamp": reend,
        "transform-subtest-name": "HANOOBish",
    }

    actual_result = tfm.transform(logcat_data, **opts)
    expected_result = [
        {
            "data": [
                {"value": 1782.0, "xaxis": 0},
                {"value": 1375.0, "xaxis": 1},
                {"value": 1497.0, "xaxis": 2},
            ],
            "subtest": "HANOOBish",
        }
    ]
    assert actual_result == expected_result

    # We should get the same results back from merge
    # since we are working with only one file
    merged = tfm.merge(actual_result)
    assert merged == expected_result


def test_logcat_transform_one_regex(tfm, logcat_data):
    def processor(groups):
        """Parses the time from a displayed time string into milliseconds."""
        return (float(groups[0]) * 1000) + float(groups[1])

    re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
    opts = {
        "first-timestamp": re_w_group,
        "processor": processor,
        "transform-subtest-name": "TimeToDisplayed",
    }

    actual_result = tfm.transform(logcat_data, **opts)
    expected_result = [
        {
            "data": [
                {"value": 1743.0, "xaxis": 0},
                {"value": 1325.0, "xaxis": 1},
                {"value": 1462.0, "xaxis": 2},
            ],
            "subtest": "TimeToDisplayed",
        }
    ]
    assert actual_result == expected_result


def test_logcat_transform_no_processor(tfm, logcat_data):
    re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
    opts = {
        "first-timestamp": re_w_group,
        "transform-subtest-name": "TimeToDisplayed",
    }

    actual_result = tfm.transform(logcat_data, **opts)
    expected_result = [
        {
            "data": [
                {"value": 1.0, "xaxis": 0},
                {"value": 1.0, "xaxis": 1},
                {"value": 1.0, "xaxis": 2},
            ],
            "subtest": "TimeToDisplayed",
        }
    ]
    assert actual_result == expected_result


def test_logcat_transform_no_groups(tfm, logcat_data):
    re_w_group = r".*Displayed.*org\.mozilla\.fennec_aurora.*"
    opts = {
        "first-timestamp": re_w_group,
        "transform-subtest-name": "TimeToDisplayed",
    }

    with pytest.raises(NotebookTransformOptionsError):
        tfm.transform(logcat_data, **opts)


def test_logcat_transform_too_many_groups(tfm, logcat_data):
    restart = r".*Activity.*Manager.*START.*org\.mozilla\.fennec_aurora/org\.mozilla\.fenix\.HomeActivity.*"  # noqa
    reend = r".*Displayed.*org\.mozilla\.fennec_aurora.*\+([\d]+)s([\d]+)ms.*"
    opts = {
        "first-timestamp": restart,
        "second-timestamp": reend,
        "transform-subtest-name": "HANOOBish",
    }

    with pytest.raises(NotebookTransformError):
        tfm.transform(logcat_data, **opts)


if __name__ == "__main__":
    mozunit.main()