
    Zi&                         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                     dS dS )   )leaderelection)LeaderElectionRecord    )ApiException)electionconfigNc                   (    e Zd Zd Zd Z	 d Zd ZdS )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        |                                           |                     g d           |                     	g d           d S )Nc                  \                          d                                d           d S Ncreate recordget leadershipappendelection_historyleadership_historys   h/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/leaderelection/leaderelection_test.py	on_createzALeaderElectionTest.test_simple_leader_election.<locals>.on_create!   2    ##O444%%&677777    c                  2                          d           d S Nupdate recordr   r   s   r   	on_updatezALeaderElectionTest.test_simple_leader_election.<locals>.on_update%       ##O44444r   c                  2                          d           d S Nzchange recordr   r   s   r   	on_changezALeaderElectionTest.test_simple_leader_election.<locals>.on_change(   r   r   mockmock_namespacec                  2                          d           d S Nstart leadingr   r   s   r   on_started_leadingzJLeaderElectionTest.test_simple_leader_election.<locals>.on_started_leading-       %%o66666r   c                  2                          d           d S Nstop leadingr   r&   s   r   on_stopped_leadingzJLeaderElectionTest.test_simple_leader_election.<locals>.on_stopped_leading0       %%n5555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 	8 	8 	8 	8 	8	5 	5 	5 	5 	5	5 	5 	5 	5 	5 %V-=v{T]_hjsuyzz		7 	7 	7 	7 	7	6 	6 	6 	6 	6  &Ic67c]o9KM M M
 	%f--11333,.r.r.rsss.0c0c0cdddddr   c           
      N   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
        |                                                                                     t          j        t          j
        |                                                                                     t          j        d           |                     g d           |                     g d           d S )Nc                  \                          d                                d           d S )NA creates recordA gets leadershipr   r   s   r   on_create_Az<LeaderElectionTest.test_leader_election.<locals>.on_create_AB   3    ##$6777%%&9:::::r   c                  2                          d           d S )NA updates recordr   r   s   r   on_update_Az<LeaderElectionTest.test_leader_election.<locals>.on_update_AF       ##$677777r   c                  2                          d           d S )NrF   r   r   s   r   on_change_Az<LeaderElectionTest.test_leader_election.<locals>.on_change_AI       ##$788888r   r!   r"   MockA   c                  2                          d           d S )NA starts leadingr   r&   s   r   on_started_leading_AzELeaderElectionTest.test_leader_election.<locals>.on_started_leading_AO       %%&899999r   c                  2                          d           d S )NA stops leadingr   r&   s   r   on_stopped_leading_AzELeaderElectionTest.test_leader_election.<locals>.on_stopped_leading_AR       %%&788888r   r.   r/   r0   r1   c                  \                          d                                d           d S )NzB creates recordB gets leadershipr   r   s   r   on_create_Bz<LeaderElectionTest.test_leader_election.<locals>.on_create_BY   rH   r   c                  2                          d           d S )NB updates recordr   r   s   r   on_update_Bz<LeaderElectionTest.test_leader_election.<locals>.on_update_B]   rL   r   c                  2                          d           d S )Nr[   r   r&   s   r   on_change_Bz<LeaderElectionTest.test_leader_election.<locals>.on_change_B`   s    %%&9:::::r   MockB   c                  2                          d           d S )NB starts leadingr   r&   s   r   on_started_leading_BzELeaderElectionTest.test_leader_election.<locals>.on_started_leading_Bf   rU   r   c                  2                          d           d S )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 	8 	8 	8 	8	9 	9 	9 	9 	9 'v/?+Wbdoq|  C  D  D&'#	: 	: 	: 	: 	:	9 	9 	9 	9 	9 "(k#89_s;OQ Q Q	; 	; 	; 	; 	; 	;	8 	8 	8 	8 	8	; 	; 	; 	; 	; 'v/?+Wbdoq|  C  D  D&'#	: 	: 	: 	: 	:	9 	9 	9 	9 	9 "(k#89_s;OQ Q Q %0$=!	 =h G G K K M MNNNTTVVV 	 =h G G K K M MNNNTTVVV
1,1 1 1	2 	2 	2 	.0 0 0	1 	1 	1 	1 	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        |                                           |                     	g d           |                     
g d           d S )Nc                  \                          d                                d           d S r   r   r   s   r   r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_create   r   r   c                  2                          d           d S r   r   r   s   r   r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_update   r   r   c                  2                          d           d S r   r   r   s   r   r    zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_change   r   r   c                  2                          d           d S )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                  2                          d           d S r$   r   r&   s   r   r'   zWLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_started_leading   r(   r   c                  2                          d           d S 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   sy   	8 	8 	8 	8 	8 	8	5 	5 	5 	5 	5	5 	5 	5 	5 	5	9 	9 	9 	9 	9 %V-=v{T]_hjs  vC  D  D	$%	!	7 	7 	7 	7 	7	6 	6 	6 	6 	6  &Ic67c]o9KM M M
 	%f--11333,2 2 2	3 	3 	3 	.0c0c0cdddddr   c                    |                      |           |                      |           |                     t          |          t          |                     t          t          |                    D ]G}|                     ||         ||         d                    |||         ||                              Hd S )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55W&& 	e 	eCWS\8C="N"U"UVY[cdg[hV]^aVb#d #d  e e e e	e 	er   N)__name__
__module____qualname__rB   rx   r   r>    r   r   r	   r	      sf        e e eBK1 K1 K1\+e +e +eZe e e e er   r	   c                   (    e Zd ZddZd Zd Zd ZdS )r9   Nc	                     g | _         d| _        d| _        || _        || _        t          |          | _        || _        || _        || _	        || _
        || _        d S )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__   s_     	"H	"""*r   c                 T   | j                                          	 | j        r(d| j        d         f| j                                          S t	          j        ddi          t          _        dt          f| j                                          S # | j                                          w xY w)NTr   codei  F)r2   acquirerm   releasejsondumpsr   body)r?   r   r   s      r   getzMockResourceLock.get   s    		 ! 3T/22
 I !%
FC= 9 9L,&IDIs   B 
(B B'c                    | j                                          	 t          | j                  dk    r	 | j                                          dS | j                            |           |                                  | xj        dz  c_        	 | j                                          dS # | 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%&&!++ I %%o666NN!IDIs   B) >B) )Cc                    | j                                          	 | j        r|                                  | j        | j        k    r	 | j                                          dS | j        d         }|| j        d<   |                                  |j        |j        k    r| 	                                 | xj        dz  c_        	 | j                                          dS # | 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 I +A.J$2Dq!NN)^-KKK   !IDIs   +C "AC C8)NNNN)r   r   r   r   r   r   r   r   r   r   r9   r9      sU        + + + +	  	  	 
  
  
          r   r9   __main__) r   leaderelectionrecordr   kubernetes.client.restr   r   unittestrn   r   rr   pytestRLockr:   TestCaser	   r9   r   mainr   r   r   <module>r      s          6 6 6 6 6 6 / / / / / /              ioqe qe qe qe qe* qe qe qeh:  :  :  :  :  :  :  : z zHMOOOOO r   