
    ?g&                         d dl mZ d dlmZ ddlmZ d dl mZ ddlZddlZddl	Z	ddl
Z
ddlZ ej                         Z G d dej                        Z G d	 d
      Zedk(  r ej$                          yy)   )leaderelection)LeaderElectionRecord    )ApiException)electionconfigNc                   &    e Zd Zd Zd Z	 d Zd Zy)LeaderElectionTestc           
      <  	 g g 		fd}fd}fd}t        dddt        |||d       }	fd}	fd}t        j                  |dd	d
||      }t	        j
                  |      j                          | j                  g d       | j                  	g d       y )Nc                  J     j                  d       j                  d       y Ncreate recordget leadershipappendelection_historyleadership_historys   b/var/www/openai/venv/lib/python3.12/site-packages/kubernetes/leaderelection/leaderelection_test.py	on_createzALeaderElectionTest.test_simple_leader_election.<locals>.on_create!        ##O4%%&67    c                  (     j                  d       y Nupdate recordr   r   s   r   	on_updatezALeaderElectionTest.test_simple_leader_election.<locals>.on_update%       ##O4r   c                  (     j                  d       y Nzchange recordr   r   s   r   	on_changezALeaderElectionTest.test_simple_leader_election.<locals>.on_change(   r   r   mockmock_namespacec                  (     j                  d       y Nstart leadingr   r   s   r   on_started_leadingzJLeaderElectionTest.test_simple_leader_election.<locals>.on_started_leading-       %%o6r   c                  (     j                  d       y Nstop leadingr   r&   s   r   on_stopped_leadingzJLeaderElectionTest.test_simple_leader_election.<locals>.on_stopped_leading0       %%n5r         @         ?locklease_durationrenew_deadlineretry_periodonstarted_leadingonstopped_leading)r   r   r   r   r   r%   r+   )MockResourceLockthread_lockr   Configr   LeaderElectionrunassert_history)
selfr   r   r    	mock_lockr'   r,   configr   r   s
           @@r   test_simple_leader_electionz.LeaderElectionTest.test_simple_leader_election   s    	8	5	5 %V-=v{T]_hjsuyz		7	6  &&Ic67c]o9KM
 	%%f-113,.rs.0cdr   c           
         g g fd}fd}fd}t        dddt        |||d       }d|_        fd}fd	}t        j                  |d
dd||      }fd}fd}	fd}
t        dddt        ||	|
d       }d|_        fd}fd}t        j                  |d
dd||      }|j
                  |_        dt        _        t        j                  t        j                  |      j                               j                          t        j                  t        j                  |      j                               j                          t        j                  d       | j                  g d       | j                  g d       y )Nc                  J     j                  d       j                  d       y )NA creates recordA gets leadershipr   r   s   r   on_create_Az<LeaderElectionTest.test_leader_election.<locals>.on_create_AB   !    ##$67%%&9:r   c                  (     j                  d       y )NA updates recordr   r   s   r   on_update_Az<LeaderElectionTest.test_leader_election.<locals>.on_update_AF       ##$67r   c                  (     j                  d       y )NrF   r   r   s   r   on_change_Az<LeaderElectionTest.test_leader_election.<locals>.on_change_AI       ##$78r   r!   r"   MockA   c                  (     j                  d       y )NA starts leadingr   r&   s   r   on_started_leading_AzELeaderElectionTest.test_leader_election.<locals>.on_started_leading_AO       %%&89r   c                  (     j                  d       y )NA stops leadingr   r&   s   r   on_stopped_leading_AzELeaderElectionTest.test_leader_election.<locals>.on_stopped_leading_AR       %%&78r   r.   r/   r0   r1   c                  J     j                  d       j                  d       y )NzB creates recordB gets leadershipr   r   s   r   on_create_Bz<LeaderElectionTest.test_leader_election.<locals>.on_create_BY   rH   r   c                  (     j                  d       y )NB updates recordr   r   s   r   on_update_Bz<LeaderElectionTest.test_leader_election.<locals>.on_update_B]   rL   r   c                  (     j                  d       y )Nr[   r   r&   s   r   on_change_Bz<LeaderElectionTest.test_leader_election.<locals>.on_change_B`   s    %%&9:r   MockB   c                  (     j                  d       y )NB starts leadingr   r&   s   r   on_started_leading_BzELeaderElectionTest.test_leader_election.<locals>.on_started_leading_Bf   rU   r   c                  (     j                  d       y )NB stops leadingr   r&   s   r   on_stopped_leading_BzELeaderElectionTest.test_leader_election.<locals>.on_stopped_leading_Bi   rY   r   T)target   )rE   rJ   rJ   r^   r^   r^   r^   )rF   rS   rW   r[   re   rh   )r9   r:   renew_count_maxr   r;   leader_record	threadingdaemonThreadr   r<   r=   starttimesleepr>   )r?   rG   rK   rN   mock_lock_ArT   rX   config_Ar\   r_   ra   mock_lock_Brf   ri   config_Br   r   s                  @@r   test_leader_electionz'LeaderElectionTest.test_leader_election>   s   	;	8	9 'v/?+Wbdoq|  C  D&'#	:	9 "((k#89_s;OQ	;	8	; 'v/?+Wbdoq|  C  D&'#	:	9 "((k#89_s;OQ %0$=$=!	 = =h G K K MNTTV 	 = =h G K K MNTTV

1,1	2 	.0	1r   c           
      T  	
 g 	g 
	
fd}	fd}	fd}	fd}t        dddt        ||||      }d|_        
fd}
fd	}t        j                  |d
dd||      }t        j                  |      j                          | j                  	g d       | j                  
g d       y )Nc                  J     j                  d       j                  d       y r   r   r   s   r   r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_create   r   r   c                  (     j                  d       y r   r   r   s   r   r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_update   r   r   c                  (     j                  d       y r   r   r   s   r   r    zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_change   r   r   c                  (     j                  d       y )Ntry update recordr   r   s   r   on_try_updatezRLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_try_update   rO   r   r!   r"   rQ   c                  (     j                  d       y r$   r   r&   s   r   r'   zWLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_started_leading   r(   r   c                  (     j                  d       y r*   r   r&   s   r   r,   zWLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_stopped_leading   r-   r   r.   r/   r0   r1   )r   r~   r   r~   r   r~   r~   r8   )	r9   r:   rl   r   r;   r   r<   r=   r>   )r?   r   r   r    r   r@   r'   r,   rA   r   r   s            @@r   (test_Leader_election_with_renew_deadlinez;LeaderElectionTest.test_Leader_election_with_renew_deadline   s    	8	5	5	9 %V-=v{T]_hjs  vC  D	$%	!	7	6  &&Ic67c]o9KM
 	%%f-113,2	3 	.0cdr   c                 $   | j                  |       | j                  |       | j                  t        |      t        |             t        t        |            D ]3  }| j                  ||   ||   dj	                  |||   ||                5 y )Nz*Not equal at index {}, expected {}, got {})msg)assertIsNotNoneassertEquallenrangeformat)r?   historyexpectedidxs       r   r>   z!LeaderElectionTest.assert_history   s    X&W%XG5W&CWS\8C="N"U"UVY[cdg[hV]^aVb#d  e 'r   N)__name__
__module____qualname__rB   rx   r   r>    r   r   r	   r	      s"    eBK1\+eZer   r	   c                   &    e Zd ZddZd Zd Zd Zy)r9   Nc	                     g | _         d| _        d| _        || _        || _        t        |      | _        || _        || _        || _	        || _
        || _        y )Nr   rc   )rm   renew_countrl   name	namespacestridentityr2   r   r   r    r   )	r?   r   r   r   shared_lockr   r   r    r   s	            r   __init__zMockResourceLock.__init__   sW     	"H	"""*r   c                 h   | j                   j                          	 | j                  r+d| j                  d   f| j                   j                          S t	        j
                  ddi      t        _        dt        f| j                   j                          S # | j                   j                          w xY w)NTr   codei  F)r2   acquirerm   releasejsondumpsr   body)r?   r   r   s      r   getzMockResourceLock.get   s    			 !!T//22
 II !%

FC= 9L,&IIDIIs   B 'B B1c                    | j                   j                          	 t        | j                        dk(  r	 | j                   j	                          y| j                  j                  |       | j                          | xj                  dz  c_        	 | j                   j	                          y# | j                   j	                          w xY w)Nr   FT)r2   r   r   rm   r   r   r   r   )r?   r   r   election_records       r   createzMockResourceLock.create   s    			 4%%&!+ II %%o6NN!IIDIIs   B, A B, ,Cc                 (   | j                   j                          	 | j                  r| j                          | j                  | j                  k\  r	 | j                   j                          y| j                  d   }|| j                  d<   | j                          |j                  |j                  k7  r| j                          | xj                  dz  c_        	 | j                   j                          y# | j                   j                          w xY w)NFr   r   T)
r2   r   r   r   rl   r   rm   r   holder_identityr    )r?   r   r   updated_record
old_records        r   updatezMockResourceLock.update   s    			 !!""$4#7#77 II ++A.J$2Dq!NN))^-K-KK !IIDIIs   5C5 -A,C5 5D)NNNN)r   r   r   r   r   r   r   r   r   r   r9   r9      s    +	 
  r   r9   __main__) r   leaderelectionrecordr   kubernetes.client.restr   r   unittestrn   r   rr   pytestRLockr:   TestCaser	   r9   r   mainr   r   r   <module>r      sl      6 /      iooqe** qeh:  : z zHMMO r   