Skip to content

Commit 6bce90a

Browse files
committed
Use the MockMicrogrid as an async context manager
This commit updates many tests that use the `MockMicrogrid` and finalize it manually to use it as a context manager so finalization is done automatically. This commit can be reviewed much more easily hiding differences in spaces (with `diff -w`, or appending `?w=1` to the GitHub URL). Signed-off-by: Leandro Lucarella <[email protected]>
1 parent b7f889e commit 6bce90a

File tree

5 files changed

+356
-348
lines changed

5 files changed

+356
-348
lines changed

tests/actor/power_distributing/test_power_distributing.py

Lines changed: 50 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ async def new(
8080
grid_meter: bool | None = None,
8181
) -> _Mocks:
8282
"""Initialize the mocks."""
83-
mockgrid = MockMicrogrid(graph=graph, grid_meter=grid_meter)
83+
mockgrid = MockMicrogrid(graph=graph, grid_meter=grid_meter, mocker=mocker)
8484
if not graph:
8585
mockgrid.add_batteries(3)
86-
await mockgrid.start(mocker)
86+
await mockgrid.start()
8787

8888
# pylint: disable=protected-access
8989
if microgrid._data_pipeline._DATA_PIPELINE is not None:
@@ -154,56 +154,59 @@ async def _patch_battery_pool_status(
154154
)
155155
)
156156

157-
async def test_constructor(self, mocker: MockerFixture) -> None:
158-
"""Test if gets all necessary data."""
159-
mockgrid = MockMicrogrid(grid_meter=True)
157+
async def test_constructor_with_grid_meter(self, mocker: MockerFixture) -> None:
158+
"""Test the constructor works with a grid meter."""
159+
mockgrid = MockMicrogrid(grid_meter=True, mocker=mocker)
160160
mockgrid.add_batteries(2)
161161
mockgrid.add_batteries(1, no_meter=True)
162-
await mockgrid.start(mocker)
163162

164-
requests_channel = Broadcast[Request]("power_distributor requests")
165-
results_channel = Broadcast[Result]("power_distributor results")
166-
battery_status_channel = Broadcast[ComponentPoolStatus]("battery_status")
167-
async with PowerDistributingActor(
168-
requests_receiver=requests_channel.new_receiver(),
169-
results_sender=results_channel.new_sender(),
170-
component_pool_status_sender=battery_status_channel.new_sender(),
171-
) as distributor:
172-
assert isinstance(distributor._component_manager, BatteryManager)
173-
assert distributor._component_manager._bat_invs_map == {
174-
9: {8},
175-
19: {18},
176-
29: {28},
177-
}
178-
assert distributor._component_manager._inv_bats_map == {
179-
8: {9},
180-
18: {19},
181-
28: {29},
182-
}
183-
await mockgrid.cleanup()
184-
185-
# Test if it works without grid side meter
186-
mockgrid = MockMicrogrid(grid_meter=False)
163+
async with mockgrid:
164+
requests_channel = Broadcast[Request]("power_distributor requests")
165+
results_channel = Broadcast[Result]("power_distributor results")
166+
battery_status_channel = Broadcast[ComponentPoolStatus]("battery_status")
167+
async with PowerDistributingActor(
168+
requests_receiver=requests_channel.new_receiver(),
169+
results_sender=results_channel.new_sender(),
170+
component_pool_status_sender=battery_status_channel.new_sender(),
171+
) as distributor:
172+
assert isinstance(distributor._component_manager, BatteryManager)
173+
assert distributor._component_manager._bat_invs_map == {
174+
9: {8},
175+
19: {18},
176+
29: {28},
177+
}
178+
assert distributor._component_manager._inv_bats_map == {
179+
8: {9},
180+
18: {19},
181+
28: {29},
182+
}
183+
184+
async def test_constructor_without_grid_meter(self, mocker: MockerFixture) -> None:
185+
"""Test the constructor works without a grid meter."""
186+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
187187
mockgrid.add_batteries(1)
188188
mockgrid.add_batteries(2, no_meter=True)
189-
await mockgrid.start(mocker)
190-
async with PowerDistributingActor(
191-
requests_receiver=requests_channel.new_receiver(),
192-
results_sender=results_channel.new_sender(),
193-
component_pool_status_sender=battery_status_channel.new_sender(),
194-
) as distributor:
195-
assert isinstance(distributor._component_manager, BatteryManager)
196-
assert distributor._component_manager._bat_invs_map == {
197-
9: {8},
198-
19: {18},
199-
29: {28},
200-
}
201-
assert distributor._component_manager._inv_bats_map == {
202-
8: {9},
203-
18: {19},
204-
28: {29},
205-
}
206-
await mockgrid.cleanup()
189+
190+
async with mockgrid:
191+
requests_channel = Broadcast[Request]("power_distributor requests")
192+
results_channel = Broadcast[Result]("power_distributor results")
193+
battery_status_channel = Broadcast[ComponentPoolStatus]("battery_status")
194+
async with PowerDistributingActor(
195+
requests_receiver=requests_channel.new_receiver(),
196+
results_sender=results_channel.new_sender(),
197+
component_pool_status_sender=battery_status_channel.new_sender(),
198+
) as distributor:
199+
assert isinstance(distributor._component_manager, BatteryManager)
200+
assert distributor._component_manager._bat_invs_map == {
201+
9: {8},
202+
19: {18},
203+
29: {28},
204+
}
205+
assert distributor._component_manager._inv_bats_map == {
206+
8: {9},
207+
18: {19},
208+
28: {29},
209+
}
207210

208211
async def init_component_data(
209212
self,

tests/actor/test_battery_pool_status.py

Lines changed: 79 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -32,77 +32,85 @@ async def test_batteries_status(self, mocker: MockerFixture) -> None:
3232
Args:
3333
mocker: Pytest mocker fixture.
3434
"""
35-
mock_microgrid = MockMicrogrid(grid_meter=True)
35+
mock_microgrid = MockMicrogrid(grid_meter=True, mocker=mocker)
3636
mock_microgrid.add_batteries(3)
37-
await mock_microgrid.start(mocker)
3837

39-
batteries = {
40-
battery.component_id
41-
for battery in mock_microgrid.mock_client.component_graph.components(
42-
component_categories={ComponentCategory.BATTERY}
38+
async with mock_microgrid:
39+
batteries = {
40+
battery.component_id
41+
for battery in mock_microgrid.mock_client.component_graph.components(
42+
component_categories={ComponentCategory.BATTERY}
43+
)
44+
}
45+
battery_status_channel = Broadcast[ComponentPoolStatus]("battery_status")
46+
battery_status_recv = battery_status_channel.new_receiver(maxsize=1)
47+
batteries_status = ComponentPoolStatusTracker(
48+
component_ids=batteries,
49+
component_status_sender=battery_status_channel.new_sender(),
50+
max_data_age_sec=5,
51+
max_blocking_duration_sec=30,
52+
component_status_tracker_type=BatteryStatusTracker,
4353
)
44-
}
45-
battery_status_channel = Broadcast[ComponentPoolStatus]("battery_status")
46-
battery_status_recv = battery_status_channel.new_receiver(maxsize=1)
47-
batteries_status = ComponentPoolStatusTracker(
48-
component_ids=batteries,
49-
component_status_sender=battery_status_channel.new_sender(),
50-
max_data_age_sec=5,
51-
max_blocking_duration_sec=30,
52-
component_status_tracker_type=BatteryStatusTracker,
53-
)
54-
await asyncio.sleep(0.1)
55-
56-
expected_working: set[int] = set()
57-
assert batteries_status.get_working_components(batteries) == expected_working
58-
59-
batteries_list = list(batteries)
60-
61-
await mock_microgrid.mock_client.send(
62-
battery_data(component_id=batteries_list[0])
63-
)
64-
await asyncio.sleep(0.1)
65-
assert batteries_status.get_working_components(batteries) == expected_working
66-
67-
expected_working.add(batteries_list[0])
68-
await mock_microgrid.mock_client.send(
69-
inverter_data(component_id=batteries_list[0] - 1)
70-
)
71-
await asyncio.sleep(0.1)
72-
assert batteries_status.get_working_components(batteries) == expected_working
73-
msg = await asyncio.wait_for(battery_status_recv.receive(), timeout=0.2)
74-
assert msg == batteries_status._current_status
75-
76-
await mock_microgrid.mock_client.send(
77-
inverter_data(component_id=batteries_list[1] - 1)
78-
)
79-
await mock_microgrid.mock_client.send(
80-
battery_data(component_id=batteries_list[1])
81-
)
82-
83-
await mock_microgrid.mock_client.send(
84-
inverter_data(component_id=batteries_list[2] - 1)
85-
)
86-
await mock_microgrid.mock_client.send(
87-
battery_data(component_id=batteries_list[2])
88-
)
89-
90-
expected_working = set(batteries_list)
91-
await asyncio.sleep(0.1)
92-
assert batteries_status.get_working_components(batteries) == expected_working
93-
msg = await asyncio.wait_for(battery_status_recv.receive(), timeout=0.2)
94-
assert msg == batteries_status._current_status
95-
96-
await batteries_status.update_status(
97-
succeeded_components={9}, failed_components={19, 29}
98-
)
99-
await asyncio.sleep(0.1)
100-
assert batteries_status.get_working_components(batteries) == {9}
101-
102-
await batteries_status.update_status(
103-
succeeded_components={9, 19}, failed_components=set()
104-
)
105-
await asyncio.sleep(0.1)
106-
assert batteries_status.get_working_components(batteries) == {9, 19}
107-
108-
await batteries_status.stop()
54+
await asyncio.sleep(0.1)
55+
56+
expected_working: set[int] = set()
57+
assert (
58+
batteries_status.get_working_components(batteries) == expected_working
59+
)
60+
61+
batteries_list = list(batteries)
62+
63+
await mock_microgrid.mock_client.send(
64+
battery_data(component_id=batteries_list[0])
65+
)
66+
await asyncio.sleep(0.1)
67+
assert (
68+
batteries_status.get_working_components(batteries) == expected_working
69+
)
70+
71+
expected_working.add(batteries_list[0])
72+
await mock_microgrid.mock_client.send(
73+
inverter_data(component_id=batteries_list[0] - 1)
74+
)
75+
await asyncio.sleep(0.1)
76+
assert (
77+
batteries_status.get_working_components(batteries) == expected_working
78+
)
79+
msg = await asyncio.wait_for(battery_status_recv.receive(), timeout=0.2)
80+
assert msg == batteries_status._current_status
81+
82+
await mock_microgrid.mock_client.send(
83+
inverter_data(component_id=batteries_list[1] - 1)
84+
)
85+
await mock_microgrid.mock_client.send(
86+
battery_data(component_id=batteries_list[1])
87+
)
88+
89+
await mock_microgrid.mock_client.send(
90+
inverter_data(component_id=batteries_list[2] - 1)
91+
)
92+
await mock_microgrid.mock_client.send(
93+
battery_data(component_id=batteries_list[2])
94+
)
95+
96+
expected_working = set(batteries_list)
97+
await asyncio.sleep(0.1)
98+
assert (
99+
batteries_status.get_working_components(batteries) == expected_working
100+
)
101+
msg = await asyncio.wait_for(battery_status_recv.receive(), timeout=0.2)
102+
assert msg == batteries_status._current_status
103+
104+
await batteries_status.update_status(
105+
succeeded_components={9}, failed_components={19, 29}
106+
)
107+
await asyncio.sleep(0.1)
108+
assert batteries_status.get_working_components(batteries) == {9}
109+
110+
await batteries_status.update_status(
111+
succeeded_components={9, 19}, failed_components=set()
112+
)
113+
await asyncio.sleep(0.1)
114+
assert batteries_status.get_working_components(batteries) == {9, 19}
115+
116+
await batteries_status.stop()

0 commit comments

Comments
 (0)