33
44"""Tests for the `Grid` module."""
55
6+ from contextlib import AsyncExitStack
7+
68from pytest_mock import MockerFixture
79
810import frequenz .sdk .microgrid .component_graph as gr
@@ -37,8 +39,10 @@ async def test_grid_1(mocker: MockerFixture) -> None:
3739 # pylint: disable=protected-access
3840 graph = gr ._MicrogridComponentGraph (components = components , connections = connections )
3941
40- async with MockMicrogrid (graph = graph , mocker = mocker ):
42+ async with MockMicrogrid (graph = graph , mocker = mocker ), AsyncExitStack () as stack :
4143 grid = microgrid .grid ()
44+ assert grid is not None
45+ stack .push_async_callback (grid .stop )
4246
4347 assert grid
4448 assert grid .fuse
@@ -69,17 +73,17 @@ async def test_grid_2(mocker: MockerFixture) -> None:
6973 # pylint: disable=protected-access
7074 graph = gr ._MicrogridComponentGraph (components = components , connections = connections )
7175
72- async with MockMicrogrid (graph = graph , mocker = mocker ):
76+ async with MockMicrogrid (graph = graph , mocker = mocker ), AsyncExitStack () as stack :
7377 grid = microgrid .grid ()
7478 assert grid is not None
79+ stack .push_async_callback (grid .stop )
7580
7681 expected_fuse_current = Current .from_amperes (123.0 )
7782 expected_fuse = Fuse (expected_fuse_current )
7883
7984 assert grid .fuse == expected_fuse
8085
8186
82-
8387async def test_grid_3 (mocker : MockerFixture ) -> None :
8488 """Validate that microgrids with a grid connection without a fuse are instantiated."""
8589 components = {
@@ -93,22 +97,25 @@ async def test_grid_3(mocker: MockerFixture) -> None:
9397 # pylint: disable=protected-access
9498 graph = gr ._MicrogridComponentGraph (components = components , connections = connections )
9599
96- async with MockMicrogrid (graph = graph , mocker = mocker ):
100+ async with MockMicrogrid (graph = graph , mocker = mocker ), AsyncExitStack () as stack :
97101 grid = microgrid .grid ()
98102 assert grid is not None
103+ stack .push_async_callback (grid .stop )
99104 assert grid .fuse is None
100105
101106
102-
103107async def test_grid_power_1 (mocker : MockerFixture ) -> None :
104108 """Test the grid power formula with a grid side meter."""
105109 mockgrid = MockMicrogrid (grid_meter = True , mocker = mocker )
106110 mockgrid .add_batteries (2 )
107111 mockgrid .add_solar_inverters (1 )
108112
109- async with mockgrid :
113+ results = []
114+ grid_meter_data = []
115+ async with mockgrid , AsyncExitStack () as stack :
110116 grid = microgrid .grid ()
111117 assert grid , "Grid is not initialized"
118+ stack .push_async_callback (grid .stop )
112119
113120 grid_power_recv = grid .power .new_receiver ()
114121
@@ -119,8 +126,6 @@ async def test_grid_power_1(mocker: MockerFixture) -> None:
119126 Power .from_watts ,
120127 )
121128
122- results = []
123- grid_meter_data = []
124129 for count in range (10 ):
125130 await mockgrid .mock_resampler .send_meter_power (
126131 [20.0 + count , 12.0 , - 13.0 , - 5.0 ]
@@ -137,9 +142,7 @@ async def test_grid_power_1(mocker: MockerFixture) -> None:
137142 assert val is not None and val .value is not None
138143 results .append (val .value )
139144
140- await grid .stop ()
141-
142- assert equal_float_lists (results , grid_meter_data )
145+ assert equal_float_lists (results , grid_meter_data )
143146
144147
145148async def test_grid_power_2 (mocker : MockerFixture ) -> None :
@@ -150,9 +153,12 @@ async def test_grid_power_2(mocker: MockerFixture) -> None:
150153 mockgrid .add_batteries (1 , no_meter = True )
151154 mockgrid .add_solar_inverters (1 )
152155
153- async with mockgrid :
156+ results : list [Quantity ] = []
157+ meter_sums : list [Quantity ] = []
158+ async with mockgrid , AsyncExitStack () as stack :
154159 grid = microgrid .grid ()
155160 assert grid , "Grid is not initialized"
161+ stack .push_async_callback (grid .stop )
156162
157163 grid_power_recv = grid .power .new_receiver ()
158164
@@ -170,8 +176,6 @@ async def test_grid_power_2(mocker: MockerFixture) -> None:
170176 ]
171177 ]
172178
173- results : list [Quantity ] = []
174- meter_sums : list [Quantity ] = []
175179 for count in range (10 ):
176180 await mockgrid .mock_resampler .send_meter_power ([20.0 + count , 12.0 , - 13.0 ])
177181 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:
190194 results .append (val .value )
191195 meter_sums .append (Quantity (meter_sum ))
192196
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 )
197199
198200
199201async def test_grid_production_consumption_power_consumer_meter (
@@ -205,9 +207,11 @@ async def test_grid_production_consumption_power_consumer_meter(
205207 mockgrid .add_batteries (2 )
206208 mockgrid .add_solar_inverters (1 )
207209
208- async with mockgrid :
210+ async with mockgrid , AsyncExitStack () as stack :
209211 grid = microgrid .grid ()
210212 assert grid , "Grid is not initialized"
213+ stack .push_async_callback (grid .stop )
214+
211215 grid_recv = grid .power .new_receiver ()
212216
213217 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(
216220 await mockgrid .mock_resampler .send_meter_power ([1.0 , 2.0 , - 3.0 , - 4.0 ])
217221 assert (await grid_recv .receive ()).value == Power .from_watts (- 4.0 )
218222
219- await grid .stop ()
220-
221223
222224async def test_grid_production_consumption_power_no_grid_meter (
223225 mocker : MockerFixture ,
@@ -227,9 +229,11 @@ async def test_grid_production_consumption_power_no_grid_meter(
227229 mockgrid .add_batteries (2 )
228230 mockgrid .add_solar_inverters (1 )
229231
230- async with mockgrid :
232+ async with mockgrid , AsyncExitStack () as stack :
231233 grid = microgrid .grid ()
232234 assert grid , "Grid is not initialized"
235+ stack .push_async_callback (grid .stop )
236+
233237 grid_recv = grid .power .new_receiver ()
234238
235239 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(
238242 await mockgrid .mock_resampler .send_meter_power ([3.0 , - 3.0 , - 4.0 ])
239243 assert (await grid_recv .receive ()).value == Power .from_watts (- 4.0 )
240244
241- await grid .stop ()
242-
243245
244246async def test_consumer_power_2_grid_meters (mocker : MockerFixture ) -> None :
245247 """Test the grid power formula with two grid meters."""
246248 mockgrid = MockMicrogrid (grid_meter = False , mocker = mocker )
247249 # with no further successor these will be detected as grid meters
248250 mockgrid .add_consumer_meters (2 )
249251
250- async with mockgrid :
252+ async with mockgrid , AsyncExitStack () as stack :
251253 grid = microgrid .grid ()
252254 assert grid , "Grid is not initialized"
255+ stack .push_async_callback (grid .stop )
256+
253257 grid_recv = grid .power .new_receiver ()
254258
255259 await mockgrid .mock_resampler .send_meter_power ([1.0 , 2.0 ])
256260 assert (await grid_recv .receive ()).value == Power .from_watts (3.0 )
257-
258- await grid .stop ()
0 commit comments