44"""Tests for the microgrid client thin wrapper."""
55
66import asyncio
7+ import contextlib
8+ from collections .abc import AsyncIterator
79
810import grpc
911import pytest
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+
3653class 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