Skip to content

Commit 4de2f5f

Browse files
committed
Simplified and fixed the emissions run tests
1 parent 6538fc6 commit 4de2f5f

File tree

2 files changed

+46
-35
lines changed

2 files changed

+46
-35
lines changed

simvue/run.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,15 +1109,10 @@ def config(
11091109

11101110
if enable_emission_metrics:
11111111
if self._user_config.run.mode == "offline":
1112-
if not (_co2_intensity := self._user_config.eco.co2_intensity):
1113-
self._error(
1114-
"Cannot record emission metrics, "
1115-
"a CO2 intensity value is required in offline mode."
1116-
)
11171112
# Create an emissions monitor with no API calls
11181113
self._emissions_monitor = CO2Monitor(
11191114
intensity_refresh_interval=None,
1120-
co2_intensity=_co2_intensity,
1115+
co2_intensity=self._user_config.eco.co2_intensity,
11211116
local_data_directory=self._user_config.eco.local_data_directory,
11221117
co2_signal_api_token=None,
11231118
thermal_design_power_per_cpu=self._user_config.eco.cpu_thermal_design_power,

tests/functional/test_run_class.py

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
import os
23
import pytest
34
import pytest_mock
@@ -15,7 +16,9 @@
1516
import datetime
1617
import simvue
1718
from simvue.api.objects import Alert, Metrics
19+
from simvue.eco.api_client import CO2SignalData, CO2SignalResponse
1820
from simvue.exception import SimvueRunError
21+
from simvue.eco.emissions_monitor import TIME_FORMAT, CO2Monitor
1922
import simvue.run as sv_run
2023
import simvue.client as sv_cl
2124
import simvue.sender as sv_send
@@ -47,38 +50,51 @@ def test_check_run_initialised_decorator() -> None:
4750

4851
@pytest.mark.run
4952
@pytest.mark.eco
50-
def test_run_with_emissions(mock_co2_signal) -> None:
51-
with sv_run.Run() as run_created:
52-
run_created.init(
53-
name="test_run_with_emissions",
54-
folder="/simvue_client_unit_tests",
55-
retention_period="1 min",
56-
tags=["test_run_with_emissions"]
53+
@pytest.mark.online
54+
def test_run_with_emissions_online(speedy_heartbeat, mock_co2_signal, create_plain_run) -> None:
55+
run_created, _ = create_plain_run
56+
run_created.config(enable_emission_metrics=True)
57+
time.sleep(3)
58+
_run = RunObject(identifier=run_created.id)
59+
_metric_names = [item[0] for item in _run.metrics]
60+
client = sv_cl.Client()
61+
for _metric in ["emissions", "energy_consumed"]:
62+
_total_metric_name = f"sustainability.{_metric}.total"
63+
_delta_metric_name = f"sustainability.{_metric}.delta"
64+
assert _total_metric_name in _metric_names
65+
assert _delta_metric_name in _metric_names
66+
_metric_values = client.get_metric_values(
67+
metric_names=[_total_metric_name, _delta_metric_name],
68+
xaxis="time",
69+
output_format="dataframe",
70+
run_ids=[run_created.id],
5771
)
58-
run_created.config(enable_emission_metrics=True, resources_metrics_interval=1)
59-
time.sleep(5)
60-
_run = RunObject(identifier=run_created.id)
61-
_metric_names = [item[0] for item in _run.metrics]
62-
client = sv_cl.Client()
63-
for _metric in ["emissions", "energy_consumed"]:
64-
_total_metric_name = f"sustainability.{_metric}.total"
65-
_delta_metric_name = f"sustainability.{_metric}.delta"
66-
assert _total_metric_name in _metric_names
67-
assert _delta_metric_name in _metric_names
68-
_metric_values = client.get_metric_values(
69-
metric_names=[_total_metric_name, _delta_metric_name],
70-
xaxis="time",
71-
output_format="dataframe",
72-
run_ids=[run_created.id],
73-
)
72+
assert _total_metric_name in _metric_values
7473

75-
# Check that total = previous total + latest delta
76-
_total_values = _metric_values[_total_metric_name].tolist()
77-
_delta_values = _metric_values[_delta_metric_name].tolist()
78-
assert len(_total_values) > 1
79-
for i in range(1, len(_total_values)):
80-
assert _total_values[i] == _total_values[i - 1] + _delta_values[i]
8174

75+
@pytest.mark.run
76+
@pytest.mark.eco
77+
@pytest.mark.offline
78+
def test_run_with_emissions_offline(speedy_heartbeat, mock_co2_signal, create_plain_run_offline) -> None:
79+
run_created, _ = create_plain_run_offline
80+
run_created.config(enable_emission_metrics=True)
81+
time.sleep(2)
82+
id_mapping = sv_send.sender(os.environ["SIMVUE_OFFLINE_DIRECTORY"])
83+
_run = RunObject(identifier=id_mapping[run_created.id])
84+
_metric_names = [item[0] for item in _run.metrics]
85+
client = sv_cl.Client()
86+
for _metric in ["emissions", "energy_consumed"]:
87+
_total_metric_name = f"sustainability.{_metric}.total"
88+
_delta_metric_name = f"sustainability.{_metric}.delta"
89+
assert _total_metric_name in _metric_names
90+
assert _delta_metric_name in _metric_names
91+
_metric_values = client.get_metric_values(
92+
metric_names=[_total_metric_name, _delta_metric_name],
93+
xaxis="time",
94+
output_format="dataframe",
95+
run_ids=[id_mapping[run_created.id]],
96+
)
97+
assert _total_metric_name in _metric_values
8298

8399
@pytest.mark.run
84100
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)