2323import time
2424import pytest
2525
26+ thread_lock = threading .RLock ()
27+
2628class LeaderElectionTest (unittest .TestCase ):
2729 def test_simple_leader_election (self ):
2830 election_history = []
@@ -38,7 +40,7 @@ def on_update():
3840 def on_change ():
3941 election_history .append ("change record" )
4042
41- mock_lock = MockResourceLock ("mock" , "mock_namespace" , "mock" , on_create , on_update , on_change , None )
43+ mock_lock = MockResourceLock ("mock" , "mock_namespace" , "mock" , thread_lock , on_create , on_update , on_change , None )
4244
4345 def on_started_leading ():
4446 leadership_history .append ("start leading" )
@@ -71,7 +73,7 @@ def on_update_A():
7173 def on_change_A ():
7274 election_history .append ("A gets leadership" )
7375
74- mock_lock_A = MockResourceLock ("mock" , "mock_namespace" , "MockA" , on_create_A , on_update_A , on_change_A , None )
76+ mock_lock_A = MockResourceLock ("mock" , "mock_namespace" , "MockA" , thread_lock , on_create_A , on_update_A , on_change_A , None )
7577 mock_lock_A .renew_count_max = 3
7678
7779 def on_started_leading_A ():
@@ -94,7 +96,7 @@ def on_update_B():
9496 def on_change_B ():
9597 leadership_history .append ("B gets leadership" )
9698
97- mock_lock_B = MockResourceLock ("mock" , "mock_namespace" , "MockB" , on_create_B , on_update_B , on_change_B , None )
99+ mock_lock_B = MockResourceLock ("mock" , "mock_namespace" , "MockB" , thread_lock , on_create_B , on_update_B , on_change_B , None )
98100 mock_lock_B .renew_count_max = 4
99101
100102 def on_started_leading_B ():
@@ -164,7 +166,7 @@ def on_change():
164166 def on_try_update ():
165167 election_history .append ("try update record" )
166168
167- mock_lock = MockResourceLock ("mock" , "mock_namespace" , "mock" , on_create , on_update , on_change , on_try_update )
169+ mock_lock = MockResourceLock ("mock" , "mock_namespace" , "mock" , thread_lock , on_create , on_update , on_change , on_try_update )
168170 mock_lock .renew_count_max = 3
169171
170172 def on_started_leading ():
@@ -204,14 +206,15 @@ def assert_history(self, history, expected):
204206
205207
206208class MockResourceLock :
207- def __init__ (self , name , namespace , identity , on_create = None , on_update = None , on_change = None , on_try_update = None ):
209+ def __init__ (self , name , namespace , identity , shared_lock , on_create = None , on_update = None , on_change = None , on_try_update = None ):
210+ # self.leader_record is shared between two MockResourceLock objects
208211 self .leader_record = []
209212 self .renew_count = 0
210213 self .renew_count_max = 4
211214 self .name = name
212215 self .namespace = namespace
213216 self .identity = str (identity )
214- self .lock = threading . RLock ()
217+ self .lock = shared_lock
215218
216219 self .on_create = on_create
217220 self .on_update = on_update
0 commit comments