Ë
    eQêjY"  ã                   óê   — d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ ddl	m
Z
 ddlmZ d	„ Ze j                  j                  Z G d
„ dej"                  «      Zedk(  r ej(                  «        yy)é    N)Úmock)Úclient)ÚApiExceptioné   )ÚLeaderElectionRecordé   )Ú	LeaseLockc                  óÄ   — t         j                  j                  t        d«      5  t	        ddd«      } d d d «       t        j
                  «        _        | S # 1 sw Y   Œ$xY w)NÚCoordinationV1ApiÚlockÚdefaultÚ	candidate)r   ÚpatchÚobjectr   r	   Ú	MagicMockÚapi_instance)r   s    úz/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/kubernetes/leaderelection/resourcelock/leaselock_test.pyÚ	make_lockr      sN   € Ü	�‰×	Ñ	œ6Ð#6Ó	7ñ 9Ü˜ ¨KÓ8ˆ÷9äŸ™Ó(€DÔØ€K÷9ð 9ús   ¥AÁAc                   óŽ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Z ej                   eed
«      d«      d„ «       Zd„ Zd„ Zy)ÚLeaseLockTestc                 óB  — t        «       }t        dddd«      }| j                  |j                  dd|«      «       |j                  j
                  j                  d   \  }}| j                  d|«       | j                  d|j                  j                  «       | j                  d|j                  j                  «       | j                  d|j                  j                  «       | j                  t        |j                  j                  j                  «       | j                  dt!        |j                  j                  j#                  «       j%                  d ¬«      «      «       | j                  |j                  j                  |j                  j&                  «       y )	Nr   Ú17ú2026-08-29 01:02:03.456789r   r   r   é   ©Útzinfo)r   r   Ú
assertTrueÚcreater   Úcreate_namespaced_leaseÚ	call_argsÚassertEqualÚmetadataÚnameÚspecÚholder_identityÚlease_duration_secondsÚUTCÚacquire_timer   ÚstrÚ
astimezoneÚreplaceÚ
renew_time)Úselfr   ÚrecordÚ	namespaceÚbodys        r   Ú2test_create_writes_the_election_record_to_the_specz@LeaseLockTest.test_create_writes_the_election_record_to_the_spec(   s9  € Ü‹{ˆÜ% k°4Ø&BØ&BóDˆð 	�‰˜Ÿ™ F¨I°vÓ>Ô?à×+Ñ+×CÑC×MÑMÈaÑP‰ˆ	�4Ø×Ñ˜ IÔ.Ø×Ñ˜ §¡×!3Ñ!3Ô4Ø×Ñ˜ d§i¡i×&?Ñ&?Ô@Ø×Ñ˜˜TŸY™Y×=Ñ=Ô>ð 	×Ñœ˜dŸi™i×4Ñ4×;Ñ;Ô<Ø×ÑÐ5Ü˜TŸY™Y×3Ñ3×>Ñ>Ó@ß%™g¨T˜gÓ2ó4ô	5ð 	×Ñ˜Ÿ™×/Ñ/°·±×1EÑ1EÕFó    c                 óÄ   — t        «       }t        dd¬«      |j                  j                  _        t        dddd«      }| j                  |j                  dd|«      «       y )	Né™  ÚConflict©ÚstatusÚreasonr   r   ú2026-08-29 01:02:03r   r   )r   r   r   r   Úside_effectr   ÚassertFalser   ©r-   r   r.   s      r   Ú,test_create_returns_false_when_the_api_failsz:LeaseLockTest.test_create_returns_false_when_the_api_fails=   sY   € Ü‹{ˆÜ@LØ˜zôA+ˆ×Ñ×1Ñ1Ô=ä% k°4Ð9NØ&;ó=ˆð 	×Ñ˜Ÿ™ V¨Y¸Ó?Õ@r2   c                 óØ   — t        «       }t        dd¬«      }||j                  j                  _        |j                  dd«      \  }}| j                  |«       | j                  ||«       y )Ni”  z	Not Foundr6   r   r   )r   r   r   Úread_namespaced_leaser:   Úgetr;   ÚassertIs)r-   r   Úexpectedr7   Úresponses        r   Ú8test_get_returns_the_exception_when_the_lease_is_missingzFLeaseLockTest.test_get_returns_the_exception_when_the_lease_is_missingF   sZ   € Ü‹{ˆÜ s°;Ô?ˆØ>Fˆ×Ñ×/Ñ/Ô;àŸ8™8 F¨IÓ6Ñˆ�à×Ñ˜Ô Ø�‰�h Õ)r2   c           	      óÔ  — t        «       }t        j                  ddddddd«      }t        j                  dd	it        j                  d
d||¬«      ¬«      |j
                  j                  _        |j                  d	d«      \  }}| j                  |«       | j                  d
|j                  «       | j                  d|j                  «       | j                  d|j                  «       y )Néê  é   é   r   r   é   éUø r#   r   r   r   ©r%   r&   r(   r,   ©r"   r$   r   r   r   )r   Údatetimer   ÚV1LeaseÚV1LeaseSpecr   r?   Úreturn_valuer@   r   r!   r%   Úlease_durationr(   )r-   r   Úacquiredr7   r.   s        r   Ú1test_get_reads_the_election_record_from_the_leasez?LeaseLockTest.test_get_reads_the_election_record_from_the_leaseP   sÉ   € Ü‹{ˆÜ×$Ñ$ T¨1¨b°!°Q¸¸6ÓBˆÜ?E¿~¹~Ø˜fÐ%Ü×#Ñ#°KØ;=Ø19Ø/7ô9ô@:ˆ×Ñ×/Ñ/Ô<ð Ÿ™ &¨)Ó4‰ˆ�à�‰˜ÔØ×Ñ˜ f×&<Ñ&<Ô=Ø×Ñ˜˜v×4Ñ4Ô5Ø×ÑÐ5°v×7JÑ7JÕKr2   c                 óþ   — t        «       }t        j                  ddid ¬«      |j                  j                  _        |j                  dd«      \  }}| j                  |«       | j                  |j                  «       y )Nr#   r   rL   r   )
r   r   rN   r   r?   rP   r@   r   ÚassertIsNoner%   )r-   r   r7   r.   s       r   Ú:test_get_on_a_lease_without_a_spec_returns_an_empty_recordzHLeaseLockTest.test_get_on_a_lease_without_a_spec_returns_an_empty_recorda   sg   € Ü‹{ˆÜ?E¿~¹~Ø˜fÐ%¨Dô@2ˆ×Ñ×/Ñ/Ô<ð Ÿ™ &¨)Ó4‰ˆ�à�‰˜ÔØ×Ñ˜&×0Ñ0Õ1r2   c                 óf  — t        «       }t        j                  j                  d«      }t        dt	        d«      t	        |«      t	        |«      «      }|j                  |«      }|j                  t        j                  ddi|¬«      «      }| j                  |j                  |j                  «       y)z†leaderelection.py compares the stored record with the observed one
        using __dict__, so a round trip has to come back identical.g   0Ý ÚAr   r   r#   r   rL   N)r   rM   Úfromtimestampr   r)   Úget_lease_specÚget_lock_objectr   rN   r!   Ú__dict__©r-   r   Únowr.   r$   Ú	read_backs         r   Ú/test_record_survives_a_write_and_read_unchangedz=LeaseLockTest.test_record_survives_a_write_and_read_unchangedk   s�   € ô ‹{ˆÜ×Ñ×-Ñ-¨lÓ;ˆÜ% k´3°r³7¼CÀ»HÄcÈ#ÃhÓOˆà×"Ñ" 6Ó*ˆØ×(Ñ(Ü�N‰N V¨VÐ$4¸4Ô@óBˆ	ð 	×Ñ˜Ÿ™¨)×*<Ñ*<Õ=r2   c                 ó’  — t        «       }t        j                  dddddd«      }| j                  dt        |«      «       t	        dt        d	«      t        |«      t        |«      «      }|j                  |«      }|j                  t        j                  d
di|¬«      «      }| j                  |j                  |j                  «       y)z@str(datetime) drops the microseconds when they are exactly zero.rF   rG   rH   r   r   rI   r9   r   r   r#   r   rL   N)
r   rM   r!   r)   r   rY   rZ   r   rN   r[   r\   s         r   Ú:test_record_without_microseconds_survives_a_write_and_readzHLeaseLockTest.test_record_without_microseconds_survives_a_write_and_readx   s¤   € ä‹{ˆÜ×Ñ  a¨¨Q°°1Ó5ˆØ×ÑÐ.´°C³Ô9Ü% k´3°r³7¼CÀ»HÄcÈ#ÃhÓOˆà×"Ñ" 6Ó*ˆØ×(Ñ(Ü�N‰N V¨VÐ$4¸4Ô@óBˆ	ð 	×Ñ˜Ÿ™¨)×*<Ñ*<Õ=r2   c           	      ó–  — t        «       }t        j                  ddddddd«      }t        j                  dd	it        j                  d
d||¬«      ¬«      |j
                  j                  _        |j                  d	d«       t        dddd«      }| j                  |j                  d	d|«      «       |j
                  j                  j                  d   d   }| j                  d|j                  j                   «       | j                  dt#        |j                  j$                  j'                  «       j)                  d ¬«      «      «       y )NrF   rG   rH   r   r   rI   rJ   r#   r   Úotherr   rK   rL   r   r   r   r   z2026-08-29 02:03:04.567890r0   r   )r   rM   r   rN   rO   r   r?   rP   r@   r   r   ÚupdateÚreplace_namespaced_leaser    r!   r$   r%   r)   r,   r*   r+   )r-   r   rR   r.   r0   s        r   Ú&test_update_replaces_the_lease_it_readz4LeaseLockTest.test_update_replaces_the_lease_it_read…   s  € Ü‹{ˆÜ×$Ñ$ T¨1¨b°!°Q¸¸6ÓBˆÜ?E¿~¹~Ø˜fÐ%Ü×#Ñ#°GØ;=Ø19Ø/7ô9ô@:ˆ×Ñ×/Ñ/Ô<ð 	�‰�˜Ô#ä% k°4Ø&BØ&BóDˆð 	�‰˜Ÿ™ F¨I°vÓ>Ô?à× Ñ ×9Ñ9×CÑCÀAÑFÀvÑNˆØ×Ñ˜ d§i¡i×&?Ñ&?Ô@Ø×ÑÐ5Ü˜TŸY™Y×1Ñ1×<Ñ<Ó>ß%™g¨T˜gÓ2ó4õ	5r2   c                 ó$  — t        «       }t        j                  ddit        j                  «       ¬«      |_        t        dd¬«      |j                  j                  _        t        ddd	d	«      }| j                  |j                  dd
|«      «       y )Nr#   r   rL   r4   r5   r6   r   r   r9   r   )r   r   rN   rO   Úlease_referencer   r   re   r:   r   r;   rd   r<   s      r   Ú,test_update_returns_false_when_the_api_failsz:LeaseLockTest.test_update_returns_false_when_the_api_fails›   s~   € Ü‹{ˆÜ%Ÿ~™~¸ÀÐ7GÜ39×3EÑ3EÓ3Gô IˆÔäAMØ˜zôB+ˆ×Ñ×2Ñ2Ô>ä% k°4Ð9NØ&;ó=ˆð 	×Ñ˜Ÿ™ V¨Y¸Ó?Õ@r2   Útzsetzrequires tzsetc                 ó(  — t        «       }t        j                  j                  d«      }dt        j                  d<   t	        j
                  «        	 t        dddd«      }|j                  |«      }| j                  t        j                  dddd	d
ddt        ¬«      |j                  «       |j                  t        j                  ddi|¬«      «      }| j                  |j                  |j                  «       |€!t        j                  j!                  dd«       n|t        j                  d<   t	        j
                  «        y# |€!t        j                  j!                  dd«       n|t        j                  d<   t	        j
                  «        w xY w)z„The election record holds local wall clock. The Lease is shared
        with other clients, so it has to carry the real UTC instant.ÚTZzAsia/Kolkatar   r   r   rF   rG   é   é   é    rI   rJ   r   r#   r   rL   N)r   ÚosÚenvironr@   Útimerj   r   rY   r!   rM   r'   r(   rZ   r   rN   r[   Úpop)r-   r   Úpreviousr.   r$   r^   s         r   Ú.test_times_are_written_as_the_real_utc_instantz<LeaseLockTest.test_times_are_written_as_the_real_utc_instant¦   s5  € ô ‹{ˆÜ—:‘:—>‘> $Ó'ˆØ)Œ�
‰
�4ÑÜ�
‰
Œð	Ü)¨+°tØ*FØ*FóHˆFð ×&Ñ& vÓ.ˆDà×ÑÜ×!Ñ! $¨¨2¨r°2°q¸&ÌÔMØ×!Ñ!ô#ð ×,Ñ,Ü—‘¨°Ð(8¸tÔDóFˆIà×Ñ˜VŸ_™_¨i×.@Ñ.@ÔAàÐÜ—
‘
—‘˜t TÕ*à#+”—
‘
˜4Ñ Ü�J‰J�Løð	 ÐÜ—
‘
—‘˜t TÕ*à#+”—
‘
˜4Ñ Ü�J‰J�Lús   ÁB(E ÅAFc                 óx   — t        «       }t        dddd«      }| j                  |j                  dd|«      «       y )Nr   r   r9   r   r   )r   r   r;   rd   r<   s      r   Ú/test_update_before_get_or_create_does_not_raisez=LeaseLockTest.test_update_before_get_or_create_does_not_raiseÂ   s:   € Ü‹{ˆÜ% k°4Ð9NØ&;ó=ˆð 	×Ñ˜Ÿ™ V¨Y¸Ó?Õ@r2   c                 óŽ   — t        «       }| j                  t        «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nz
not a time)r   ÚassertRaisesÚ
ValueErrorÚtime_str_to_iso)r-   r   s     r   Ú#test_an_unparsable_time_is_reportedz1LeaseLockTest.test_an_unparsable_time_is_reportedÉ   s:   € Ü‹{ˆØ×ÑœzÓ*ñ 	/Ø× Ñ  Ô.÷	/÷ 	/ñ 	/ús	    ;»AN)Ú__name__Ú
__module__Ú__qualname__r1   r=   rD   rS   rV   r_   ra   rf   ri   ÚunittestÚ
skipUnlessÚhasattrrr   ru   rw   r|   © r2   r   r   r   &   sj   „ òGò*Aò*òLò"2ò>ò>ò5ò,	Að €X×Ñ™  wÓ/Ð1AÓBñó Cðò6Aó/r2   r   Ú__main__)rM   rp   rr   r€   r   Ú
kubernetesr   Úkubernetes.client.restr   Úleaderelectionrecordr   Ú	leaselockr	   r   ÚtimezoneÚutcr'   ÚTestCaser   r}   Úmainrƒ   r2   r   ú<module>r�      si   ðó Û 	Û Û Ý å Ý /å 7Ý  òð ×Ñ×Ñ€ôf/�H×%Ñ%ô f/ðR ˆzÒØ€H‡M�M…Oð r2   