@@ -819,14 +819,16 @@ async def mysetup(self, r, method):
819
819
"type" : "subscribe" ,
820
820
}
821
821
822
- async def mycleanup (self ):
822
+ async def myfinish (self ):
823
823
message = await self .messages .get ()
824
824
assert message == {
825
825
"channel" : b"foo" ,
826
826
"data" : 1 ,
827
827
"pattern" : None ,
828
828
"type" : "subscribe" ,
829
829
}
830
+
831
+ async def mykill (self ):
830
832
# kill thread
831
833
async with self .cond :
832
834
self .state = 4 # quit
@@ -836,41 +838,52 @@ async def test_reconnect_socket_error(self, r: redis.Redis, method):
836
838
"""
837
839
Test that a socket error will cause reconnect
838
840
"""
839
- async with async_timeout .timeout (self .timeout ):
840
- await self .mysetup (r , method )
841
- # now, disconnect the connection, and wait for it to be re-established
842
- async with self .cond :
843
- assert self .state == 0
844
- self .state = 1
845
- with mock .patch .object (self .pubsub .connection , "_parser" ) as mockobj :
846
- mockobj .read_response .side_effect = socket .error
847
- mockobj .can_read .side_effect = socket .error
848
- # wait until task noticies the disconnect until we undo the patch
849
- await self .cond .wait_for (lambda : self .state >= 2 )
850
- assert not self .pubsub .connection .is_connected
851
- # it is in a disconnecte state
852
- # wait for reconnect
853
- await self .cond .wait_for (lambda : self .pubsub .connection .is_connected )
854
- assert self .state == 3
841
+ try :
842
+ async with async_timeout .timeout (self .timeout ):
843
+ await self .mysetup (r , method )
844
+ # now, disconnect the connection, and wait for it to be re-established
845
+ async with self .cond :
846
+ assert self .state == 0
847
+ self .state = 1
848
+ with mock .patch .object (self .pubsub .connection , "_parser" ) as m :
849
+ m .read_response .side_effect = socket .error
850
+ m .can_read .side_effect = socket .error
851
+ # wait until task noticies the disconnect until we
852
+ # undo the patch
853
+ await self .cond .wait_for (lambda : self .state >= 2 )
854
+ assert not self .pubsub .connection .is_connected
855
+ # it is in a disconnecte state
856
+ # wait for reconnect
857
+ await self .cond .wait_for (
858
+ lambda : self .pubsub .connection .is_connected
859
+ )
860
+ assert self .state == 3
855
861
856
- await self .mycleanup ()
862
+ await self .myfinish ()
863
+ finally :
864
+ await self .mykill ()
857
865
858
866
async def test_reconnect_disconnect (self , r : redis .Redis , method ):
859
867
"""
860
868
Test that a manual disconnect() will cause reconnect
861
869
"""
862
- async with async_timeout .timeout (self .timeout ):
863
- await self .mysetup (r , method )
864
- # now, disconnect the connection, and wait for it to be re-established
865
- async with self .cond :
866
- self .state = 1
867
- await self .pubsub .connection .disconnect ()
868
- assert not self .pubsub .connection .is_connected
869
- # wait for reconnect
870
- await self .cond .wait_for (lambda : self .pubsub .connection .is_connected )
871
- assert self .state == 3
872
-
873
- await self .mycleanup ()
870
+ try :
871
+ async with async_timeout .timeout (self .timeout ):
872
+ await self .mysetup (r , method )
873
+ # now, disconnect the connection, and wait for it to be re-established
874
+ async with self .cond :
875
+ self .state = 1
876
+ await self .pubsub .connection .disconnect ()
877
+ assert not self .pubsub .connection .is_connected
878
+ # wait for reconnect
879
+ await self .cond .wait_for (
880
+ lambda : self .pubsub .connection .is_connected
881
+ )
882
+ assert self .state == 3
883
+
884
+ await self .myfinish ()
885
+ finally :
886
+ await self .mykill ()
874
887
875
888
async def loop (self ):
876
889
# reader loop, performing state transitions as it
0 commit comments