blob: 3692a799f1526bbed1556fb6ce83eb3b79996232 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import json
import pytest
from otava.report import Report, ReportType
from otava.series import Metric, Series
@pytest.fixture(scope="module")
def series():
series1 = [1.02, 0.95, 0.99, 1.00, 1.12, 0.90, 0.50, 0.51, 0.48, 0.48, 0.55]
series2 = [2.02, 2.03, 2.01, 2.04, 1.82, 1.85, 1.79, 1.81, 1.80, 1.76, 1.78]
time = list(range(len(series1)))
return Series(
"test",
branch=None,
time=time,
metrics={"series1": Metric(1, 1.0), "series2": Metric(1, 1.0)},
data={"series1": series1, "series2": series2},
attributes={},
)
@pytest.fixture(scope="module")
def change_points(series):
return series.analyze().change_points_by_time
@pytest.fixture(scope="module")
def report(series, change_points):
return Report(series, change_points)
def test_report(series, change_points):
report = Report(series, change_points)
output = report.produce_report("test", ReportType.LOG)
assert "series1" in output
assert "series2" in output
assert "1.02" in output
assert "0.55" in output
assert "2.02" in output
assert "1.78" in output
assert "-11.0%" in output
assert "-49.4%" in output
# 2 lines for the header
# 1 line per each time point
# 3 lines per each change point
assert len(output.split("\n")) == len(series.time) + 2 + 3 * len(change_points)
def test_json_report(report):
output = report.produce_report("test_name_from_config", ReportType.JSON)
obj = json.loads(output)
expected = {'test_name_from_config': [{'attributes': {},
'changes': [{'forward_change_percent': '-11',
'index': 4,
'magnitude': '0.124108',
'mean_after': '1.801429',
'mean_before': '2.025000',
'metric': 'series2',
'pvalue': '0.000000',
'stddev_after': '0.026954',
'stddev_before': '0.011180',
'time': 4}],
'time': 4},
{'attributes': {},
'changes': [{'forward_change_percent': '-49',
'index': 6,
'magnitude': '0.977513',
'mean_after': '0.504000',
'mean_before': '0.996667',
'metric': 'series1',
'pvalue': '0.000000',
'stddev_after': '0.025768',
'stddev_before': '0.067495',
'time': 6}],
'time': 6}]}
assert isinstance(obj, dict)
assert obj == expected