Skip to content

Commit 4ef09d9

Browse files
committed
Improved ecoclient tests, changed token to Secretstr
1 parent 85e6f9f commit 4ef09d9

File tree

2 files changed

+26
-12
lines changed

2 files changed

+26
-12
lines changed

simvue/eco/emissions_monitor.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class CO2Monitor(pydantic.BaseModel):
4747
local_data_directory: pydantic.DirectoryPath
4848
intensity_refresh_interval: int | None | str
4949
co2_intensity: float | None
50-
co2_signal_api_token: str | None
50+
co2_signal_api_token: pydantic.SecretStr | None
5151
offline: bool = False
5252

5353
def now(self) -> str:
@@ -252,7 +252,6 @@ def estimate_co2_emissions(
252252
)
253253
_current_co2_intensity = self._current_co2_data.data.carbon_intensity
254254
_co2_units = self._current_co2_data.carbon_intensity_units
255-
256255
_process.gpu_percentage = gpu_percent
257256
_process.cpu_percentage = cpu_percent
258257
_previous_energy: float = _process.total_energy
@@ -271,8 +270,6 @@ def estimate_co2_emissions(
271270
# Measured value is in g/kWh, convert to kg/kWs
272271
_carbon_intensity_kgpws: float = _current_co2_intensity / (60 * 60 * 1e3)
273272

274-
_previous_emission: float = _process.co2_emission
275-
276273
_process.co2_delta = (
277274
_process.power_usage * _carbon_intensity_kgpws * measure_interval
278275
)

tests/unit/test_ecoclient.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def test_outdated_data_check(
5555
time.sleep(3)
5656
_ems_monitor.estimate_co2_emissions(**_measure_params)
5757

58-
assert _spy.call_count == 2 if refresh else 1, f"{_spy.call_count} != {2 if refresh else 1}"
58+
assert _spy.call_count == (2 if refresh else 1), f"{_spy.call_count} != {2 if refresh else 1}"
5959

6060

6161
def test_co2_monitor_properties(mock_co2_signal) -> None:
@@ -65,20 +65,37 @@ def test_co2_monitor_properties(mock_co2_signal) -> None:
6565
thermal_design_power_per_gpu=130,
6666
local_data_directory=tempd,
6767
intensity_refresh_interval=None,
68-
co2_intensity=None,
68+
co2_intensity=40,
6969
co2_signal_api_token=None
7070
)
7171
_measure_params = {
7272
"process_id": "test_co2_monitor_properties",
7373
"cpu_percent": 20,
7474
"gpu_percent": 40,
75-
"measure_interval": 1
75+
"measure_interval": 2
7676
}
77+
7778
_ems_monitor.estimate_co2_emissions(**_measure_params)
79+
7880
assert _ems_monitor.current_carbon_intensity
81+
assert _ems_monitor.n_cores_per_cpu == 4
7982
assert _ems_monitor.process_data["test_co2_monitor_properties"]
80-
assert _ems_monitor.total_power_usage
81-
assert _ems_monitor.total_co2_emission
82-
assert _ems_monitor.total_co2_delta
83-
assert _ems_monitor.total_energy
84-
assert _ems_monitor.total_energy_delta
83+
84+
# Will use this equation
85+
# Power used = (TDP_cpu * cpu_percent / num_cores) + (TDP_gpu * gpu_percent)
86+
assert _ems_monitor.total_power_usage == (80 * 0.2 * 1 / 4) + (130 * 0.4 * 1)
87+
88+
# Energy used = power used * measure interval
89+
assert _ems_monitor.total_energy == _ems_monitor.total_power_usage * 2
90+
91+
# CO2 emission = energy * CO2 intensity
92+
# Need to convert CO2 intensity from g/kWh to kg/kWs
93+
# So divide by 1000 (g -> kg)
94+
# And divide by 60*60 (kWh -> kws)
95+
assert _ems_monitor.total_co2_emission == _ems_monitor.total_energy * 40 / (60*60*1000)
96+
97+
_ems_monitor.estimate_co2_emissions(**_measure_params)
98+
# Check delta is half of total, since we've now called this twice
99+
assert _ems_monitor.total_co2_delta == _ems_monitor.total_co2_emission / 2
100+
assert _ems_monitor.total_energy_delta == _ems_monitor.total_energy / 2
101+

0 commit comments

Comments
 (0)