Bug 1630610 - Add tests for perftestnotebook.py and transformer.py. r=sparky

Depends on D73926

Differential Revision: https://phabricator.services.mozilla.com/D73927
This commit is contained in:
Yue Zhang 2020-05-13 12:08:40 +00:00
parent a8fc57d316
commit 44c0a36b80
4 changed files with 135 additions and 2 deletions

View File

@ -62,7 +62,7 @@ def files(data):
resources["file_2"] = _create_temp_files(json_2, json.dumps(data["data_2"]))
txt_3 = dirs["resources"] / "file_3.txt"
resources["file_3"] = _create_temp_files(txt_3, json.dumps(data["data_3"]))
resources["file_3"] = _create_temp_files(txt_3, str(data["data_3"]))
output = dirs["output"] / "output.json"

View File

@ -11,7 +11,9 @@ skip-if = python == 2
[test_mach_commands.py]
[test_metrics_utils.py]
[test_perfherder.py]
[test_perftestnotebook.py]
[test_profile.py]
[test_proxy.py]
[test_scriptinfo.py]
[test_utils.py]
[test_transformer.py]
[test_utils.py]

View File

@ -0,0 +1,86 @@
import json
import mozunit
import pathlib
from mozperftest.metrics.notebook.analyzer import NotebookAnalyzer
from mozperftest.metrics.notebook.constant import Constant
from mozperftest.metrics.notebook.transformer import Transformer
from mozperftest.metrics.notebook.transforms.single_json import SingleJsonRetriever
def test_init(ptnbs):
for ptnb in ptnbs.values():
assert isinstance(ptnb.fmt_data, dict)
assert isinstance(ptnb.file_groups, dict)
assert isinstance(ptnb.config, dict)
assert isinstance(ptnb.sort_files, bool)
assert isinstance(ptnb.const, Constant)
assert isinstance(ptnb.analyzer, NotebookAnalyzer)
assert isinstance(ptnb.transformer, Transformer)
def test_parse_file_grouping(ptnbs):
def _check_files_created(ptnb, expected_files):
actual_files = set(ptnb.parse_file_grouping(expected_files))
expected_files = set(expected_files)
# Check all parsed files are regular files.
assert all([pathlib.Path(file).is_file for file in actual_files])
# Check parse_file_grouping function returns correct result.
assert actual_files - expected_files == set()
# If file_grouping is a list of files.
ptnb = ptnbs["ptnb_list"]
expected_files = ptnb.file_groups["group_1"]
_check_files_created(ptnb, expected_files)
# If file_grouping is a directory string.
ptnb = ptnbs["ptnb_str"]
expected_path = ptnb.file_groups["group_1"]
expected_files = [f.resolve().as_posix() for f in pathlib.Path(expected_path).iterdir()]
_check_files_created(ptnb, expected_files)
def test_process(ptnbs, files):
# Temporary resource files.
files, _, output = files
file_1 = files["file_1"]
file_2 = files["file_2"]
# Create expected output.
expected_output = [
{
"data": [
{"value": 101, "xaxis": 1, "file": file_1},
{"value": 102, "xaxis": 1, "file": file_1},
{"value": 103, "xaxis": 1, "file": file_1},
{"value": 201, "xaxis": 2, "file": file_2},
{"value": 202, "xaxis": 2, "file": file_2},
{"value": 203, "xaxis": 2, "file": file_2},
],
"name": "group_1",
"subtest": "browserScripts.timings.firstPaint",
}
]
ptnb = ptnbs["ptnb_str"]
ptnb.transformer = SingleJsonRetriever()
# Create expected result.
expected_result = {
"data": expected_output,
"file-output": output,
}
# Check return value.
actual_result = ptnb.process()
assert actual_result == expected_result
# Check output file.
with pathlib.Path(output).open() as f:
actual_output = json.load(f)
assert expected_output == actual_output
if __name__ == "__main__":
mozunit.main()

View File

@ -0,0 +1,45 @@
import mozunit
import pytest
from mozperftest.metrics.notebook.transformer import Transformer
def test_files_getter(files):
files, _, _ = files
assert files == Transformer(files).files
def test_files_setter(files):
files, _, _ = files
files = list(files.values())
tfm = Transformer()
tfm.files = files
assert files == tfm.files
def test_files_setter_failure():
tfm = Transformer()
tfm.files = "fail"
assert not tfm.files
def test_open_data(data, files):
tfm = Transformer()
files, _, _ = files
json_1 = files["file_1"]
json_2 = files["file_2"]
txt_3 = files["file_3"]
# If a json file is open.
assert data["data_1"] == tfm.open_data(json_1)
assert data["data_2"] == tfm.open_data(json_2)
# If an other type file is open.
assert [str(data["data_3"])] == tfm.open_data(txt_3)
# Test failure
with pytest.raises(Exception):
tfm.open_data("fail")
if __name__ == "__main__":
mozunit.main()