Skip to content

Commit fb854a1

Browse files
committed
Use an async context manager to start the server in the tests
This makes the tests a bit more concise and readable. Signed-off-by: Leandro Lucarella <[email protected]>
1 parent add3b34 commit fb854a1

File tree

1 file changed

+27
-81
lines changed

1 file changed

+27
-81
lines changed

tests/microgrid/test_client.py

Lines changed: 27 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"""Tests for the microgrid client thin wrapper."""
55

66
import asyncio
7+
import contextlib
8+
from collections.abc import AsyncIterator
79

810
import grpc
911
import pytest
@@ -33,6 +35,21 @@
3335
# pylint: disable=missing-class-docstring,no-member
3436

3537

38+
@contextlib.asynccontextmanager
39+
async def _gprc_server(
40+
port: int,
41+
servicer: mock_api.MockMicrogridServicer | None = None,
42+
) -> AsyncIterator[mock_api.MockMicrogridServicer]:
43+
if servicer is None:
44+
servicer = mock_api.MockMicrogridServicer()
45+
server = mock_api.MockGrpcServer(servicer, port=port)
46+
await server.start()
47+
try:
48+
yield servicer
49+
finally:
50+
assert await server.graceful_shutdown()
51+
52+
3653
class TestMicrogridGrpcClient:
3754
"""Tests for the microgrid client thin wrapper."""
3855

@@ -47,11 +64,7 @@ def create_client(port: int) -> client.MicrogridApiClient:
4764

4865
async def test_components(self) -> None:
4966
"""Test the components() method."""
50-
servicer = mock_api.MockMicrogridServicer()
51-
server = mock_api.MockGrpcServer(servicer, port=57899)
52-
await server.start()
53-
54-
try:
67+
async with _gprc_server(57899) as servicer:
5568
microgrid = self.create_client(57899)
5669

5770
assert set(await microgrid.components()) == set()
@@ -165,16 +178,9 @@ async def test_components(self) -> None:
165178
Component(999, ComponentCategory.BATTERY),
166179
}
167180

168-
finally:
169-
assert await server.graceful_shutdown()
170-
171181
async def test_connections(self) -> None:
172182
"""Test the connections() method."""
173-
servicer = mock_api.MockMicrogridServicer()
174-
server = mock_api.MockGrpcServer(servicer, port=57898)
175-
await server.start()
176-
177-
try:
183+
async with _gprc_server(57898) as servicer:
178184
microgrid = self.create_client(57898)
179185

180186
assert set(await microgrid.connections()) == set()
@@ -320,9 +326,6 @@ async def test_connections(self) -> None:
320326
Connection(5, 7),
321327
}
322328

323-
finally:
324-
assert await server.graceful_shutdown()
325-
326329
async def test_bad_connections(self) -> None:
327330
"""Validate that the client does not apply connection filters itself."""
328331

@@ -341,11 +344,7 @@ def ListAllComponents(
341344
) -> microgrid_pb.ComponentList:
342345
return microgrid_pb.ComponentList(components=self._components)
343346

344-
servicer = BadServicer()
345-
server = mock_api.MockGrpcServer(servicer, port=57897)
346-
await server.start()
347-
348-
try:
347+
async with _gprc_server(57897, BadServicer()) as servicer:
349348
microgrid = self.create_client(57897)
350349

351350
assert list(await microgrid.connections()) == []
@@ -391,16 +390,9 @@ def ListAllComponents(
391390
== unfiltered
392391
)
393392

394-
finally:
395-
assert await server.graceful_shutdown()
396-
397393
async def test_meter_data(self) -> None:
398394
"""Test the meter_data() method."""
399-
servicer = mock_api.MockMicrogridServicer()
400-
server = mock_api.MockGrpcServer(servicer, port=57899)
401-
await server.start()
402-
403-
try:
395+
async with _gprc_server(57899) as servicer:
404396
microgrid = self.create_client(57899)
405397

406398
servicer.add_component(
@@ -420,20 +412,13 @@ async def test_meter_data(self) -> None:
420412
peekable = (await microgrid.meter_data(83)).into_peekable()
421413
await asyncio.sleep(0.2)
422414

423-
finally:
424-
assert await server.graceful_shutdown()
425-
426415
latest = peekable.peek()
427416
assert isinstance(latest, MeterData)
428417
assert latest.component_id == 83
429418

430419
async def test_battery_data(self) -> None:
431420
"""Test the battery_data() method."""
432-
servicer = mock_api.MockMicrogridServicer()
433-
server = mock_api.MockGrpcServer(servicer, port=57899)
434-
await server.start()
435-
436-
try:
421+
async with _gprc_server(57899) as servicer:
437422
microgrid = self.create_client(57899)
438423

439424
servicer.add_component(
@@ -453,20 +438,13 @@ async def test_battery_data(self) -> None:
453438
peekable = (await microgrid.battery_data(83)).into_peekable()
454439
await asyncio.sleep(0.2)
455440

456-
finally:
457-
assert await server.graceful_shutdown()
458-
459441
latest = peekable.peek()
460442
assert isinstance(latest, BatteryData)
461443
assert latest.component_id == 83
462444

463445
async def test_inverter_data(self) -> None:
464446
"""Test the inverter_data() method."""
465-
servicer = mock_api.MockMicrogridServicer()
466-
server = mock_api.MockGrpcServer(servicer, port=57899)
467-
await server.start()
468-
469-
try:
447+
async with _gprc_server(57899) as servicer:
470448
microgrid = self.create_client(57899)
471449

472450
servicer.add_component(
@@ -486,20 +464,13 @@ async def test_inverter_data(self) -> None:
486464
peekable = (await microgrid.inverter_data(83)).into_peekable()
487465
await asyncio.sleep(0.2)
488466

489-
finally:
490-
assert await server.graceful_shutdown()
491-
492467
latest = peekable.peek()
493468
assert isinstance(latest, InverterData)
494469
assert latest.component_id == 83
495470

496471
async def test_ev_charger_data(self) -> None:
497472
"""Test the ev_charger_data() method."""
498-
servicer = mock_api.MockMicrogridServicer()
499-
server = mock_api.MockGrpcServer(servicer, port=57899)
500-
await server.start()
501-
502-
try:
473+
async with _gprc_server(57899) as servicer:
503474
microgrid = self.create_client(57899)
504475

505476
servicer.add_component(
@@ -519,21 +490,13 @@ async def test_ev_charger_data(self) -> None:
519490
peekable = (await microgrid.ev_charger_data(83)).into_peekable()
520491
await asyncio.sleep(0.2)
521492

522-
finally:
523-
assert await server.graceful_shutdown()
524-
525493
latest = peekable.peek()
526494
assert isinstance(latest, EVChargerData)
527495
assert latest.component_id == 83
528496

529497
async def test_charge(self) -> None:
530498
"""Check if charge is able to charge component."""
531-
servicer = mock_api.MockMicrogridServicer()
532-
server = mock_api.MockGrpcServer(servicer, port=57899)
533-
534-
await server.start()
535-
536-
try:
499+
async with _gprc_server(57899) as servicer:
537500
microgrid = self.create_client(57899)
538501

539502
servicer.add_component(
@@ -546,17 +509,9 @@ async def test_charge(self) -> None:
546509
assert servicer.latest_power.component_id == 83
547510
assert servicer.latest_power.power == 12
548511

549-
finally:
550-
assert await server.graceful_shutdown()
551-
552512
async def test_discharge(self) -> None:
553513
"""Check if discharge is able to discharge component."""
554-
servicer = mock_api.MockMicrogridServicer()
555-
server = mock_api.MockGrpcServer(servicer, port=57899)
556-
557-
await server.start()
558-
559-
try:
514+
async with _gprc_server(57899) as servicer:
560515
microgrid = self.create_client(57899)
561516

562517
servicer.add_component(
@@ -568,16 +523,10 @@ async def test_discharge(self) -> None:
568523
assert servicer.latest_power is not None
569524
assert servicer.latest_power.component_id == 73
570525
assert servicer.latest_power.power == -15
571-
finally:
572-
assert await server.graceful_shutdown()
573526

574527
async def test_set_bounds(self) -> None:
575528
"""Check if set_bounds is able to set bounds for component."""
576-
servicer = mock_api.MockMicrogridServicer()
577-
server = mock_api.MockGrpcServer(servicer, port=57899)
578-
await server.start()
579-
580-
try:
529+
async with _gprc_server(57899) as servicer:
581530
microgrid = self.create_client(57899)
582531

583532
servicer.add_component(
@@ -599,9 +548,6 @@ async def test_set_bounds(self) -> None:
599548
await microgrid.set_bounds(cid, -10.0, 2.0)
600549
await asyncio.sleep(0.1)
601550

602-
finally:
603-
assert await server.graceful_shutdown()
604-
605551
assert len(expected_bounds) == len(servicer.get_bounds())
606552

607553
def sort_key(

0 commit comments

Comments
 (0)