3
3
4
4
"""Tests for the `Grid` module."""
5
5
6
+ from contextlib import AsyncExitStack
7
+
6
8
from pytest_mock import MockerFixture
7
9
8
10
import frequenz .sdk .microgrid .component_graph as gr
@@ -37,8 +39,10 @@ async def test_grid_1(mocker: MockerFixture) -> None:
37
39
# pylint: disable=protected-access
38
40
graph = gr ._MicrogridComponentGraph (components = components , connections = connections )
39
41
40
- async with MockMicrogrid (graph = graph , mocker = mocker ):
42
+ async with MockMicrogrid (graph = graph , mocker = mocker ), AsyncExitStack () as stack :
41
43
grid = microgrid .grid ()
44
+ assert grid is not None
45
+ stack .push_async_callback (grid .stop )
42
46
43
47
assert grid
44
48
assert grid .fuse
@@ -69,17 +73,17 @@ async def test_grid_2(mocker: MockerFixture) -> None:
69
73
# pylint: disable=protected-access
70
74
graph = gr ._MicrogridComponentGraph (components = components , connections = connections )
71
75
72
- async with MockMicrogrid (graph = graph , mocker = mocker ):
76
+ async with MockMicrogrid (graph = graph , mocker = mocker ), AsyncExitStack () as stack :
73
77
grid = microgrid .grid ()
74
78
assert grid is not None
79
+ stack .push_async_callback (grid .stop )
75
80
76
81
expected_fuse_current = Current .from_amperes (123.0 )
77
82
expected_fuse = Fuse (expected_fuse_current )
78
83
79
84
assert grid .fuse == expected_fuse
80
85
81
86
82
-
83
87
async def test_grid_3 (mocker : MockerFixture ) -> None :
84
88
"""Validate that microgrids with a grid connection without a fuse are instantiated."""
85
89
components = {
@@ -93,22 +97,25 @@ async def test_grid_3(mocker: MockerFixture) -> None:
93
97
# pylint: disable=protected-access
94
98
graph = gr ._MicrogridComponentGraph (components = components , connections = connections )
95
99
96
- async with MockMicrogrid (graph = graph , mocker = mocker ):
100
+ async with MockMicrogrid (graph = graph , mocker = mocker ), AsyncExitStack () as stack :
97
101
grid = microgrid .grid ()
98
102
assert grid is not None
103
+ stack .push_async_callback (grid .stop )
99
104
assert grid .fuse is None
100
105
101
106
102
-
103
107
async def test_grid_power_1 (mocker : MockerFixture ) -> None :
104
108
"""Test the grid power formula with a grid side meter."""
105
109
mockgrid = MockMicrogrid (grid_meter = True , mocker = mocker )
106
110
mockgrid .add_batteries (2 )
107
111
mockgrid .add_solar_inverters (1 )
108
112
109
- async with mockgrid :
113
+ results = []
114
+ grid_meter_data = []
115
+ async with mockgrid , AsyncExitStack () as stack :
110
116
grid = microgrid .grid ()
111
117
assert grid , "Grid is not initialized"
118
+ stack .push_async_callback (grid .stop )
112
119
113
120
grid_power_recv = grid .power .new_receiver ()
114
121
@@ -119,8 +126,6 @@ async def test_grid_power_1(mocker: MockerFixture) -> None:
119
126
Power .from_watts ,
120
127
)
121
128
122
- results = []
123
- grid_meter_data = []
124
129
for count in range (10 ):
125
130
await mockgrid .mock_resampler .send_meter_power (
126
131
[20.0 + count , 12.0 , - 13.0 , - 5.0 ]
@@ -137,9 +142,7 @@ async def test_grid_power_1(mocker: MockerFixture) -> None:
137
142
assert val is not None and val .value is not None
138
143
results .append (val .value )
139
144
140
- await grid .stop ()
141
-
142
- assert equal_float_lists (results , grid_meter_data )
145
+ assert equal_float_lists (results , grid_meter_data )
143
146
144
147
145
148
async def test_grid_power_2 (mocker : MockerFixture ) -> None :
@@ -150,9 +153,12 @@ async def test_grid_power_2(mocker: MockerFixture) -> None:
150
153
mockgrid .add_batteries (1 , no_meter = True )
151
154
mockgrid .add_solar_inverters (1 )
152
155
153
- async with mockgrid :
156
+ results : list [Quantity ] = []
157
+ meter_sums : list [Quantity ] = []
158
+ async with mockgrid , AsyncExitStack () as stack :
154
159
grid = microgrid .grid ()
155
160
assert grid , "Grid is not initialized"
161
+ stack .push_async_callback (grid .stop )
156
162
157
163
grid_power_recv = grid .power .new_receiver ()
158
164
@@ -170,8 +176,6 @@ async def test_grid_power_2(mocker: MockerFixture) -> None:
170
176
]
171
177
]
172
178
173
- results : list [Quantity ] = []
174
- meter_sums : list [Quantity ] = []
175
179
for count in range (10 ):
176
180
await mockgrid .mock_resampler .send_meter_power ([20.0 + count , 12.0 , - 13.0 ])
177
181
await mockgrid .mock_resampler .send_bat_inverter_power ([0.0 , - 5.0 ])
@@ -190,10 +194,8 @@ async def test_grid_power_2(mocker: MockerFixture) -> None:
190
194
results .append (val .value )
191
195
meter_sums .append (Quantity (meter_sum ))
192
196
193
- await grid .stop ()
194
-
195
- assert len (results ) == 10
196
- assert equal_float_lists (results , meter_sums )
197
+ assert len (results ) == 10
198
+ assert equal_float_lists (results , meter_sums )
197
199
198
200
199
201
async def test_grid_production_consumption_power_consumer_meter (
@@ -205,9 +207,11 @@ async def test_grid_production_consumption_power_consumer_meter(
205
207
mockgrid .add_batteries (2 )
206
208
mockgrid .add_solar_inverters (1 )
207
209
208
- async with mockgrid :
210
+ async with mockgrid , AsyncExitStack () as stack :
209
211
grid = microgrid .grid ()
210
212
assert grid , "Grid is not initialized"
213
+ stack .push_async_callback (grid .stop )
214
+
211
215
grid_recv = grid .power .new_receiver ()
212
216
213
217
await mockgrid .mock_resampler .send_meter_power ([1.0 , 2.0 , 3.0 , 4.0 ])
@@ -216,8 +220,6 @@ async def test_grid_production_consumption_power_consumer_meter(
216
220
await mockgrid .mock_resampler .send_meter_power ([1.0 , 2.0 , - 3.0 , - 4.0 ])
217
221
assert (await grid_recv .receive ()).value == Power .from_watts (- 4.0 )
218
222
219
- await grid .stop ()
220
-
221
223
222
224
async def test_grid_production_consumption_power_no_grid_meter (
223
225
mocker : MockerFixture ,
@@ -227,9 +229,11 @@ async def test_grid_production_consumption_power_no_grid_meter(
227
229
mockgrid .add_batteries (2 )
228
230
mockgrid .add_solar_inverters (1 )
229
231
230
- async with mockgrid :
232
+ async with mockgrid , AsyncExitStack () as stack :
231
233
grid = microgrid .grid ()
232
234
assert grid , "Grid is not initialized"
235
+ stack .push_async_callback (grid .stop )
236
+
233
237
grid_recv = grid .power .new_receiver ()
234
238
235
239
await mockgrid .mock_resampler .send_meter_power ([2.5 , 3.5 , 4.0 ])
@@ -238,21 +242,19 @@ async def test_grid_production_consumption_power_no_grid_meter(
238
242
await mockgrid .mock_resampler .send_meter_power ([3.0 , - 3.0 , - 4.0 ])
239
243
assert (await grid_recv .receive ()).value == Power .from_watts (- 4.0 )
240
244
241
- await grid .stop ()
242
-
243
245
244
246
async def test_consumer_power_2_grid_meters (mocker : MockerFixture ) -> None :
245
247
"""Test the grid power formula with two grid meters."""
246
248
mockgrid = MockMicrogrid (grid_meter = False , mocker = mocker )
247
249
# with no further successor these will be detected as grid meters
248
250
mockgrid .add_consumer_meters (2 )
249
251
250
- async with mockgrid :
252
+ async with mockgrid , AsyncExitStack () as stack :
251
253
grid = microgrid .grid ()
252
254
assert grid , "Grid is not initialized"
255
+ stack .push_async_callback (grid .stop )
256
+
253
257
grid_recv = grid .power .new_receiver ()
254
258
255
259
await mockgrid .mock_resampler .send_meter_power ([1.0 , 2.0 ])
256
260
assert (await grid_recv .receive ()).value == Power .from_watts (3.0 )
257
-
258
- await grid .stop ()
0 commit comments