o
    3Ih&                     @   s   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 ZG dd dejZG d	d
 d
ZedkrJe  dS dS )   )leaderelection)LeaderElectionRecord    )ApiException)electionconfigNc                   @   s.   e Zd Zdd Zdd Z	 dd Zdd Zd	S )
LeaderElectionTestc              	      s   g  g  fdd} fdd} fdd}t dddt|||d }fd	d
}fdd}tj|ddd||d}t|  |  g d | g d d S )Nc                           d  d d S Ncreate recordget leadershipappend election_historyleadership_historyr   m/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/kubernetes/leaderelection/leaderelection_test.py	on_create!      
zALeaderElectionTest.test_simple_leader_election.<locals>.on_createc                           d d S Nupdate recordr   r   r   r   r   	on_update%      zALeaderElectionTest.test_simple_leader_election.<locals>.on_updatec                      r   Nzchange recordr   r   r   r   r   	on_change(   r   zALeaderElectionTest.test_simple_leader_election.<locals>.on_changemockmock_namespacec                      r   Nstart leadingr   r   r   r   r   on_started_leading-   r   zJLeaderElectionTest.test_simple_leader_election.<locals>.on_started_leadingc                      r   Nstop leadingr   r   r!   r   r   on_stopped_leading0   r   zJLeaderElectionTest.test_simple_leader_election.<locals>.on_stopped_leading      @         ?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   r   test_simple_leader_election   s   z.LeaderElectionTest.test_simple_leader_electionc              	      sX  g  g  fdd} fdd} fdd}t ddd	t|||d }d
|_fdd}fdd}tj|ddd||d} fdd} fdd}	fdd}
t dddt||	|
d }d|_fdd}fdd}tj|ddd||d}|j|_dt_tjt	
| d   tjt	
| d   td! |  g d" | g d# d S )$Nc                      r   )NA creates recordA gets leadershipr   r   r   r   r   on_create_AB   r   z<LeaderElectionTest.test_leader_election.<locals>.on_create_Ac                      r   )NA updates recordr   r   r   r   r   on_update_AF   r   z<LeaderElectionTest.test_leader_election.<locals>.on_update_Ac                      r   )Nr<   r   r   r   r   r   on_change_AI   r   z<LeaderElectionTest.test_leader_election.<locals>.on_change_Ar   r   MockA   c                      r   )NA starts leadingr   r   r!   r   r   on_started_leading_AO   r   zELeaderElectionTest.test_leader_election.<locals>.on_started_leading_Ac                      r   )NA stops leadingr   r   r!   r   r   on_stopped_leading_AR   r   zELeaderElectionTest.test_leader_election.<locals>.on_stopped_leading_Ar&   r'   r(   r)   c                      r   )NzB creates recordB gets leadershipr   r   r   r   r   on_create_BY   r   z<LeaderElectionTest.test_leader_election.<locals>.on_create_Bc                      r   )NB updates recordr   r   r   r   r   on_update_B]   r   z<LeaderElectionTest.test_leader_election.<locals>.on_update_Bc                      r   )NrG   r   r   r!   r   r   on_change_B`   r   z<LeaderElectionTest.test_leader_election.<locals>.on_change_BMockB   c                      r   )NB starts leadingr   r   r!   r   r   on_started_leading_Bf   r   zELeaderElectionTest.test_leader_election.<locals>.on_started_leading_Bc                      r   )NB stops leadingr   r   r!   r   r   on_stopped_leading_Bi   r   zELeaderElectionTest.test_leader_election.<locals>.on_stopped_leading_BT)target   )r;   r>   r>   rI   rI   rI   rI   )r<   rC   rE   rG   rN   rP   )r1   r2   renew_count_maxr   r3   leader_record	threadingdaemonThreadr   r4   r5   starttimesleepr6   )r7   r=   r?   r@   mock_lock_ArD   rF   config_ArH   rJ   rK   mock_lock_BrO   rQ   config_Br   r   r   test_leader_election>   sF   
z'LeaderElectionTest.test_leader_electionc           	   	      s   g  g  fdd} fdd} fdd} fdd}t d	d
d	t||||}d|_fdd}fdd}tj|ddd||d}t|  |  g d | g d d S )Nc                      r   r	   r   r   r   r   r   r      r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_createc                      r   r   r   r   r   r   r   r      r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_updatec                      r   r   r   r   r   r   r   r      r   zNLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_changec                      r   )Ntry update recordr   r   r   r   r   on_try_update   r   zRLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_try_updater   r   rB   c                      r   r   r   r   r!   r   r   r"      r   zWLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_started_leadingc                      r   r#   r   r   r!   r   r   r%      r   zWLeaderElectionTest.test_Leader_election_with_renew_deadline.<locals>.on_stopped_leadingr&   r'   r(   r)   )r
   ra   r   ra   r   ra   ra   r0   )	r1   r2   rT   r   r3   r   r4   r5   r6   )	r7   r   r   r   rb   r8   r"   r%   r9   r   r   r   (test_Leader_election_with_renew_deadline   s&   	z;LeaderElectionTest.test_Leader_election_with_renew_deadlinec              
   C   sh   |  | |  | | t|t| tt|D ]}| j|| || d||| || d qd S )Nz*Not equal at index {}, expected {}, got {})msg)assertIsNotNoneassertEquallenrangeformat)r7   historyexpectedidxr   r   r   r6      s   

z!LeaderElectionTest.assert_historyN)__name__
__module____qualname__r:   r`   rc   r6   r   r   r   r   r      s    !N-r   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r1   Nc	           	      C   sJ   g | _ d| _d| _|| _|| _t|| _|| _|| _|| _	|| _
|| _d S )Nr   rM   )rU   renew_countrT   name	namespacestridentityr*   r   r   r   rb   )	r7   rq   rr   rt   shared_lockr   r   r   rb   r   r   r   __init__   s   

zMockResourceLock.__init__c                 C   s\   | j   z"| jrd| jd fW | j   S tddit_dtfW | j   S | j   w )NTr   codei  F)r*   acquirerU   releasejsondumpsr   body)r7   rq   rr   r   r   r   get   s   
zMockResourceLock.getc                 C   sh   | j   z(t| jdkrW | j   dS | j| |   |  jd7  _W | j   dS | j   w )Nr   FT)r*   rx   rg   rU   ry   r   r   rp   )r7   rq   rr   election_recordr   r   r   create   s   
zMockResourceLock.createc                 C   s   | j   z<| jr|   | j| jkrW | j   dS | jd }|| jd< |   |j|jkr3| 	  |  jd7  _W | j   dS | j   w )NFr   r   T)
r*   rx   rb   rp   rT   ry   rU   r   holder_identityr   )r7   rq   rr   updated_record
old_recordr   r   r   update   s   


zMockResourceLock.update)NNNN)rm   rn   ro   rv   r}   r   r   r   r   r   r   r1      s
    
r1   __main__) r   leaderelectionrecordr   kubernetes.client.restr   r   unittestrV   rz   rZ   pytestRLockr2   TestCaser   r1   rm   mainr   r   r   r   <module>   s     5=