Skip to content

Commit 4bd6e94

Browse files
173 dataholder default max and min timestamp wrong way round (#177)
* 173 - use properties for max and min timestamps that go to default values if nothing has been set * 173 - Add tests for DataHolder * 173 - fix tests that set timestamps * 173 - ignore mypy
1 parent 7f33780 commit 4bd6e94

File tree

6 files changed

+86
-22
lines changed

6 files changed

+86
-22
lines changed

tel2puml/otel_to_pv/data_holders/base.py

+33-5
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,33 @@ class DataHolder(ABC):
1919
def __init__(self) -> None:
2020
"""Constructor method."""
2121

22-
self.min_timestamp: int = 999999999999999999999999999999999999999
23-
self.max_timestamp: int = 0
22+
self._min_timestamp: int = 9223372036854775807
23+
self._max_timestamp: int = 0
24+
25+
@property
26+
def max_timestamp(self) -> int:
27+
"""Property to get the max timestamp. If the max timestamp is less than
28+
the min timestamp, return the maximum value of an sqlite int
29+
(292 years in nanoseconds).
30+
31+
:return: The max timestamp
32+
:rtype: `int`
33+
"""
34+
if self._max_timestamp < self._min_timestamp:
35+
return 9223372036854775807
36+
return self._max_timestamp
37+
38+
@property
39+
def min_timestamp(self) -> int:
40+
"""Property to get the min timestamp. If the min timestamp is greater
41+
than the max timestamp, return 0.
42+
43+
:return: The min timestamp
44+
:rtype: `int`
45+
"""
46+
if self._min_timestamp > self._max_timestamp:
47+
return 0
48+
return self._min_timestamp
2449

2550
def save_data(self, otel_event: OTelEvent) -> None:
2651
"""Method to save an OTelEvent, and keep track of the min and max
@@ -29,10 +54,13 @@ def save_data(self, otel_event: OTelEvent) -> None:
2954
:param otel_event: An OTelEvent object
3055
:type otel_event: :class: `OTelEvent`
3156
"""
32-
self.min_timestamp = min(
33-
self.min_timestamp, otel_event.start_timestamp
57+
self._min_timestamp = min(
58+
self._min_timestamp, otel_event.start_timestamp
59+
)
60+
self._max_timestamp = max(
61+
self._max_timestamp,
62+
otel_event.end_timestamp
3463
)
35-
self.max_timestamp = max(self.max_timestamp, otel_event.end_timestamp)
3664
self._save_data(otel_event)
3765

3866
def __enter__(self) -> Self:

tests/tel2puml/otel_to_puml/conftest.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,8 @@ def sql_data_holder_with_otel_jobs(
363363
sql_data_holder = SQLDataHolder(
364364
config=mock_sql_config,
365365
)
366-
sql_data_holder.min_timestamp = 10**12
367-
sql_data_holder.max_timestamp = 2 * 10**12
366+
sql_data_holder._min_timestamp = 10**12
367+
sql_data_holder._max_timestamp = 2 * 10**12
368368
with sql_data_holder:
369369
for otel_events in otel_jobs.values():
370370
for otel_event in otel_events:

tests/tel2puml/otel_to_pv/conftest.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -1156,8 +1156,8 @@ def sql_data_holder_with_otel_jobs(
11561156
sql_data_holder = SQLDataHolder(
11571157
config=mock_sql_config,
11581158
)
1159-
sql_data_holder.min_timestamp = 10**12
1160-
sql_data_holder.max_timestamp = 2 * 10**12
1159+
sql_data_holder._min_timestamp = 10**12
1160+
sql_data_holder._max_timestamp = 2 * 10**12
11611161
with sql_data_holder:
11621162
for otel_events in otel_jobs.values():
11631163
for otel_event in otel_events:
@@ -1181,8 +1181,8 @@ def sql_data_holder_with_multiple_otel_job_names(
11811181
sql_data_holder = SQLDataHolder(
11821182
config=mock_sql_config,
11831183
)
1184-
sql_data_holder.min_timestamp = 10**12
1185-
sql_data_holder.max_timestamp = 2 * 10**12
1184+
sql_data_holder._min_timestamp = 10**12
1185+
sql_data_holder._max_timestamp = 2 * 10**12
11861186
with sql_data_holder:
11871187
for otel_events in otel_jobs_multiple_job_names.values():
11881188
for otel_event in otel_events:
@@ -1204,8 +1204,8 @@ def sql_data_holder_with_shuffled_otel_events(
12041204
sql_data_holder = SQLDataHolder(
12051205
config=mock_sql_config,
12061206
)
1207-
sql_data_holder.min_timestamp = 10**12
1208-
sql_data_holder.max_timestamp = 2 * 10**12
1207+
sql_data_holder._min_timestamp = 10**12
1208+
sql_data_holder._max_timestamp = 2 * 10**12
12091209
with sql_data_holder:
12101210
shuffled_tuples = [
12111211
("1", 0),
@@ -1241,8 +1241,8 @@ def sql_data_holder_otel_jobs_with_job_names_on_root(
12411241
sql_data_holder = SQLDataHolder(
12421242
config=mock_sql_config,
12431243
)
1244-
sql_data_holder.min_timestamp = 10**12
1245-
sql_data_holder.max_timestamp = 2 * 10**12
1244+
sql_data_holder._min_timestamp = 10**12
1245+
sql_data_holder._max_timestamp = 2 * 10**12
12461246
with sql_data_holder:
12471247
for otel_events in otel_jobs_with_job_names_on_root.values():
12481248
for otel_event in otel_events:

tests/tel2puml/otel_to_pv/data_holders/sql_data_holder/test_sql_dataholder.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ def test_sql_data_holder_init(
5151
holder = SQLDataHolder(mock_sql_config)
5252
# Test the super().__init__() method
5353
assert (
54-
holder.min_timestamp == 999999999999999999999999999999999999999
54+
holder._min_timestamp == 9223372036854775807
5555
)
56-
assert holder.max_timestamp == 0
56+
assert holder._max_timestamp == 0
5757
# Test attributes set correctly
5858
assert holder.batch_size == 10
5959
assert holder.node_models_to_save == []
@@ -473,7 +473,7 @@ def test_remove_jobs_outside_of_time_window(
473473
caplog: LogCaptureFixture,
474474
) -> None:
475475
"""Test the remove_jobs_outside_of_time_window function."""
476-
sql_data_holder_with_otel_jobs.max_timestamp = 10**12 + 60 * 10**10
476+
sql_data_holder_with_otel_jobs._max_timestamp = 10**12 + 60 * 10**10
477477
caplog.clear()
478478
caplog.set_level(logging.INFO)
479479
sql_data_holder_with_otel_jobs.remove_jobs_outside_of_time_window()

tests/tel2puml/otel_to_pv/data_holders/test_base_data_holder.py

+38-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,48 @@
88
)
99

1010

11+
class TestDataHolder:
12+
"""Tests for the DataHolder class."""
13+
@staticmethod
14+
@pytest.fixture(autouse=True)
15+
def _remove_abstract_methods(monkeypatch: MonkeyPatch) -> None:
16+
"""Remove abstract methods from the DataHolder class."""
17+
monkeypatch.setattr(DataHolder, "__abstractmethods__", set())
18+
19+
@staticmethod
20+
def test__init__() -> None:
21+
"""Test the __init__ method."""
22+
data_holder = DataHolder() # type: ignore[abstract]
23+
assert data_holder._max_timestamp == 0
24+
assert data_holder._min_timestamp == 9223372036854775807
25+
26+
@staticmethod
27+
def test_max_timestamp() -> None:
28+
"""Test the max_timestamp property."""
29+
data_holder = DataHolder() # type: ignore[abstract]
30+
assert data_holder.max_timestamp == 9223372036854775807
31+
data_holder._max_timestamp = 10**12
32+
assert data_holder.max_timestamp == 9223372036854775807
33+
data_holder._min_timestamp = 0
34+
assert data_holder.max_timestamp == 10**12
35+
36+
@staticmethod
37+
def test_min_timestamp() -> None:
38+
"""Test the min_timestamp property."""
39+
data_holder = DataHolder() # type: ignore[abstract]
40+
assert data_holder.min_timestamp == 0
41+
data_holder._min_timestamp = 10**12
42+
assert data_holder.min_timestamp == 0
43+
data_holder._max_timestamp = 2 * 10**12
44+
assert data_holder.min_timestamp == 10**12
45+
46+
1147
def test_get_time_window(monkeypatch: MonkeyPatch) -> None:
1248
"""Test the get_time_window function."""
1349
monkeypatch.setattr(DataHolder, "__abstractmethods__", set())
1450
data_holder = DataHolder() # type: ignore[abstract]
15-
data_holder.min_timestamp = 10**12
16-
data_holder.max_timestamp = 2 * 10**12
51+
data_holder._min_timestamp = 10**12
52+
data_holder._max_timestamp = 2 * 10**12
1753
time_buffer = 1
1854
expected_result = (1060000000000, 1940000000000)
1955
assert get_time_window(time_buffer, data_holder) == expected_result

tests/tel2puml/otel_to_pv/test_ingest_otel_data.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ def test_fetch_data_holder(mock_yaml_config_dict: dict[str, Any]) -> None:
188188
data_holder = fetch_data_holder(ingest_data_config)
189189
assert isinstance(data_holder, SQLDataHolder)
190190
assert data_holder.batch_size == 5
191-
assert data_holder.max_timestamp == 0
192-
assert data_holder.min_timestamp == 999999999999999999999999999999999999999
191+
assert data_holder.min_timestamp == 0
192+
assert data_holder.max_timestamp == 9223372036854775807
193193
assert not data_holder.node_models_to_save
194194
assert not data_holder.node_relationships_to_save

0 commit comments

Comments
 (0)