summaryrefslogtreecommitdiffstats
path: root/python/mozperftest/mozperftest/tests/test_transformer.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozperftest/mozperftest/tests/test_transformer.py')
-rw-r--r--python/mozperftest/mozperftest/tests/test_transformer.py161
1 files changed, 161 insertions, 0 deletions
diff --git a/python/mozperftest/mozperftest/tests/test_transformer.py b/python/mozperftest/mozperftest/tests/test_transformer.py
new file mode 100644
index 0000000000..b5323eabe6
--- /dev/null
+++ b/python/mozperftest/mozperftest/tests/test_transformer.py
@@ -0,0 +1,161 @@
+import mozunit
+import pytest
+from jsonschema import ValidationError
+
+from mozperftest.metrics.exceptions import (
+ NotebookDuplicateTransformsError,
+ NotebookInvalidPathError,
+ NotebookInvalidTransformError,
+)
+from mozperftest.metrics.notebook.transformer import (
+ Transformer,
+ get_transformer,
+ get_transformers,
+)
+from mozperftest.tests.data.perftestetl_plugin import (
+ test_transformer_perftestetl_plugin_1,
+ test_transformer_perftestetl_plugin_2,
+)
+from mozperftest.tests.support import HERE, get_running_env
+
+_, metadata, _ = get_running_env()
+prefix = "PerftestNotebook"
+
+
+def test_init_failure():
+ class TempClass(object):
+ def temp_fun():
+ return 1
+
+ with pytest.raises(NotebookInvalidTransformError):
+ Transformer(custom_transformer=TempClass())
+
+
+def test_files_getter(files):
+ files = files["resources"]
+ assert files == Transformer(files, logger=metadata, prefix=prefix).files
+
+
+def test_files_setter(files):
+ files = files["resources"]
+ files = list(files.values())
+ tfm = Transformer(logger=metadata, prefix=prefix)
+ tfm.files = files
+ assert files == tfm.files
+
+
+def test_files_setter_failure():
+ tfm = Transformer(logger=metadata, prefix=prefix)
+ tfm.files = "fail"
+ assert not tfm.files
+
+
+def test_open_data(data, files):
+ tfm = Transformer(logger=metadata, prefix=prefix)
+
+ files = files["resources"]
+ 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")
+
+
+def test_jsonschema_valitate_failure(files):
+ class BadTransformer:
+ def transform(self, data):
+ return {"bad data": "bad data"}
+
+ def merge(self, sde):
+ return {"bad data": "bad data"}
+
+ files = files["resources"]
+ file_1 = files["file_1"]
+ file_2 = files["file_2"]
+
+ tfm = Transformer([], BadTransformer(), logger=metadata, prefix=prefix)
+ tfm.files = [file_1, file_2]
+ with pytest.raises(ValidationError):
+ tfm.process("name")
+
+
+def test_get_transformer():
+ path_1 = (
+ HERE
+ / "data"
+ / "perftestetl_plugin"
+ / "test_transformer_perftestetl_plugin_1.py"
+ )
+ assert (
+ get_transformer(path_1.as_posix()).__name__
+ == test_transformer_perftestetl_plugin_1.TestTransformer1.__name__
+ )
+
+ path_2 = (
+ "mozperftest.tests.data.perftestetl_plugin."
+ + "test_transformer_perftestetl_plugin_2:TestTransformer2"
+ )
+ assert (
+ get_transformer(path_2).__name__
+ == test_transformer_perftestetl_plugin_2.TestTransformer2.__name__
+ )
+
+
+def test_get_transformer_failure():
+ path_1 = HERE / "data" / "does-not-exist.py"
+ with pytest.raises(NotebookInvalidPathError):
+ get_transformer(path_1.as_posix())
+
+ path_2 = HERE / "data" / "does-not-exist"
+ with pytest.raises(ImportError):
+ get_transformer(path_2.as_posix())
+
+ path_3 = (
+ "mozperftest.tests.data.perftestetl_plugin."
+ + "test_transformer_perftestetl_plugin_2:TestTransformer3"
+ )
+ with pytest.raises(ImportError):
+ get_transformer(path_3)
+
+ path_4 = (
+ "mozperftest.tests.data.perftestetl_plugin."
+ + "test_transformer_perftestetl_plugin_3:TestTransformer3"
+ )
+ with pytest.raises(ImportError):
+ get_transformer(path_4)
+
+ with pytest.raises(NotebookInvalidTransformError):
+ get_transformer(__file__)
+
+
+def test_get_transformers():
+ dirpath = HERE / "data" / "perftestetl_plugin"
+ tfms = get_transformers(dirpath)
+ assert test_transformer_perftestetl_plugin_1.TestTransformer1.__name__ in tfms
+ assert test_transformer_perftestetl_plugin_2.TestTransformer2.__name__ in tfms
+
+
+def test_get_transformers_failure():
+ dirpath = HERE / "data" / "does-not-exist"
+ with pytest.raises(NotebookInvalidPathError):
+ get_transformers(dirpath)
+
+ dirpath = HERE / "data" / "perftestetl_plugin" / "test_transformer_1.py"
+ with pytest.raises(NotebookInvalidPathError):
+ get_transformers(dirpath)
+
+ dirpath = HERE / "data" / "multiple_transforms_error"
+ with pytest.raises(NotebookDuplicateTransformsError):
+ get_transformers(dirpath)
+
+
+if __name__ == "__main__":
+ mozunit.main()