@@ -846,3 +846,54 @@ async def test_service_call_params(hass):
846
846
847
847
# Stop all tasks to avoid conflicts with other tests
848
848
await Function .reaper_stop ()
849
+
850
+
851
+ async def test_serive_call_blocking (hass , caplog ):
852
+ """Test that service calls with blocking=True actually block."""
853
+ notify_q = asyncio .Queue (0 )
854
+
855
+ await setup_script (
856
+ hass ,
857
+ notify_q ,
858
+ [dt (2020 , 7 , 1 , 12 , 0 , 0 , 0 )],
859
+ """
860
+ seq_num = 0
861
+
862
+ @time_trigger("startup")
863
+ def func_startup():
864
+ global seq_num
865
+
866
+ seq_num += 1
867
+ pyscript.var1 = 1
868
+ pyscript.service1(blocking=True)
869
+ pyscript.done = [seq_num, pyscript.var1]
870
+
871
+ seq_num += 1
872
+ pyscript.service1(blocking=True)
873
+ pyscript.done = [seq_num, pyscript.var1]
874
+
875
+ seq_num += 1
876
+ service.call("pyscript", "service1", blocking=True)
877
+ pyscript.done = [seq_num, pyscript.var1]
878
+
879
+ seq_num += 1
880
+ pyscript.var1 = int(pyscript.var1) + 1
881
+ service.call("pyscript", "long_sleep", blocking=True, limit=1e-6)
882
+ pyscript.done = [seq_num, pyscript.var1]
883
+
884
+ @service
885
+ def long_sleep():
886
+ task.delay(10000)
887
+
888
+ @service
889
+ def service1():
890
+ pyscript.var1 = int(pyscript.var1) + 1
891
+
892
+ """ ,
893
+ config = {DOMAIN : {CONF_ALLOW_ALL_IMPORTS : True , CONF_HASS_IS_GLOBAL : True }},
894
+ )
895
+ hass .bus .async_fire (EVENT_HOMEASSISTANT_STARTED )
896
+ assert literal_eval (await wait_until_done (notify_q )) == [1 , "2" ]
897
+ assert literal_eval (await wait_until_done (notify_q )) == [2 , "3" ]
898
+ assert literal_eval (await wait_until_done (notify_q )) == [3 , "4" ]
899
+ assert literal_eval (await wait_until_done (notify_q )) == [4 , "5" ]
0 commit comments