§
    Ètºf1>  ã                  ó  — d Z ddlmZ ddlZddlZddlmZm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dZ ej        ¦   «         r ed¦  «        € ed¦  «        €dZdZ G d„ de¦  «        Z G d„ de¦  «        ZdS )z'
Tests for L{twisted.python.lockfile}.
é    )ÚannotationsN)ÚskipIfÚ
skipUnless)ÚNoReturn)Úlockfile)ÚrequireModule)Úplatform)ÚTestCaseFÚ zwin32api.OpenProcessÚ
pywintypesTzZOn windows, lockfile.kill is not implemented in the absence of win32api and/or pywintypes.c                  ó  — e Zd ZdZdd„Z e ej        ¦   «         d¦  «        dd„¦   «         Zdd„Z	 e ej        ¦   «         d¦  «        dd	„¦   «         Z
 eee¦  «        dd
„¦   «         Z eee¦  «        dd„¦   «         Zdd„ZdS )Ú	UtilTestszM
    Tests for the helper functions used to implement L{FilesystemLock}.
    ÚreturnÚNonec                óð   — |                       ¦   «         }t          j        d|¦  «         |                      t          t          j        d|¦  «        }|                      |j        t          j        ¦  «         dS )z 
        L{lockfile.symlink} raises L{OSError} with C{errno} set to L{EEXIST}
        when an attempt is made to create a symlink which already exists.
        ÚfooN)Úmktempr   ÚsymlinkÚassertRaisesÚOSErrorÚassertEqualÚerrnoÚEEXIST©ÚselfÚnameÚexcs      úY/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/test/test_lockfile.pyÚtest_symlinkEEXISTzUtilTests.test_symlinkEEXIST(   s`   € ð
 �{Š{‰}Œ}ˆÝÔ˜ Ñ%Ô%Ð%Ø×Ò¥­Ô)9¸5À$ÑGÔGˆØ×Ò˜œ¥E¤LÑ1Ô1Ð1Ð1Ð1ó    úBspecial rename EIO handling only necessary and correct on Windows.c                ó  — |                       ¦   «         }d
d„}|                      t          d|¦  «         |                      t          t          j        |d¦  «        }|                      |j        t          j        ¦  «         d	S )a<  
        L{lockfile.symlink} raises L{OSError} with C{errno} set to L{EIO} when
        the underlying L{rename} call fails with L{EIO}.

        Renaming a file on Windows may fail if the target of the rename is in
        the process of being deleted (directory deletion appears not to be
        atomic).
        ÚsrcÚstrÚdstr   r   c                ó6   — t          t          j        d ¦  «        ‚©N©r   r   ÚEIO©r#   r%   s     r   Ú
fakeRenamez4UtilTests.test_symlinkEIOWindows.<locals>.fakeRenameA   s   € Ý�%œ) TÑ*Ô*Ð*r    Úrenamer   N©r#   r$   r%   r$   r   r   )	r   Úpatchr   r   ÚIOErrorr   r   r   r)   )r   r   r+   r   s       r   Útest_symlinkEIOWindowsz UtilTests.test_symlinkEIOWindows2   sy   € ð �{Š{‰}Œ}ˆð	+ð 	+ð 	+ð 	+ð 	�
Š
•8˜X zÑ2Ô2Ð2Ø×Ò¥­Ô)9¸4ÀÑGÔGˆØ×Ò˜œ¥E¤IÑ.Ô.Ð.Ð.Ð.r    c                óÄ   — |                       ¦   «         }|                      t          t          j        |¦  «        }|                      |j        t          j        ¦  «         dS )zŸ
        L{lockfile.readlink} raises L{OSError} with C{errno} set to L{ENOENT}
        when an attempt is made to read a symlink which does not exist.
        N)r   r   r   r   Úreadlinkr   r   ÚENOENTr   s      r   Útest_readlinkENOENTzUtilTests.test_readlinkENOENTH   sK   € ð
 �{Š{‰}Œ}ˆØ×Ò¥­Ô):¸DÑAÔAˆØ×Ò˜œ¥E¤LÑ1Ô1Ð1Ð1Ð1r    úGspecial readlink EACCES handling only necessary and correct on Windows.c                ó  — |                       ¦   «         }d	d„}|                      t          d|¦  «         |                      t          t          j        |¦  «        }|                      |j        t          j        ¦  «         dS )
a\  
        L{lockfile.readlink} raises L{OSError} with C{errno} set to L{EACCES}
        on Windows when the underlying file open attempt fails with C{EACCES}.

        Opening a file on Windows may fail if the path is inside a directory
        which is in the process of being deleted (directory deletion appears
        not to be atomic).
        Úpathr$   Úmoder   r   c                ó6   — t          t          j        d ¦  «        ‚r'   ©r   r   ÚEACCES)r7   r8   s     r   ÚfakeOpenz6UtilTests.test_readlinkEACCESWindows.<locals>.fakeOpen`   ó   € Ý�%œ,¨Ñ-Ô-Ð-r    Ú_openN)r7   r$   r8   r$   r   r   )	r   r.   r   r   r/   r2   r   r   r;   )r   r   r<   r   s       r   Útest_readlinkEACCESWindowsz$UtilTests.test_readlinkEACCESWindowsQ   sw   € ð �{Š{‰}Œ}ˆð	.ð 	.ð 	.ð 	.ð 	�
Š
•8˜W hÑ/Ô/Ð/Ø×Ò¥­Ô):¸DÑAÔAˆØ×Ò˜œ¥E¤LÑ1Ô1Ð1Ð1Ð1r    c                óR   — t          j        t          j        ¦   «         d¦  «         dS )z}
        L{lockfile.kill} returns without error if passed the PID of a
        process which exists and signal C{0}.
        r   N)r   ÚkillÚosÚgetpid©r   s    r   Ú	test_killzUtilTests.test_killg   s"   € õ 	Œ•b”i‘k”k 1Ñ%Ô%Ð%Ð%Ð%r    c                óž   — |                       t          t          j        dd¦  «        }|                      |j        t
          j        ¦  «         dS )z�
        L{lockfile.kill} raises L{OSError} with errno of L{ESRCH} if
        passed a PID which does not correspond to any process.
        iÿÿÿr   N)r   r   r   rA   r   r   ÚESRCH)r   r   s     r   Útest_killESRCHzUtilTests.test_killESRCHo   s?   € ð ×Ò¥­¬¸	À1ÑEÔEˆØ×Ò˜œ¥E¤KÑ0Ô0Ð0Ð0Ð0r    c                ó   — |                       t          dd¦  «         t          j        |                      ¦   «         ¦  «        }|                     ¦   «          |                      |                     ¦   «         ¦  «         dS )zµ
        Verify that when L{lockfile.kill} does end up as None (e.g. on Windows
        without pywin32), it doesn't end up being called and raising a
        L{TypeError}.
        rA   N)r.   r   ÚFilesystemLockr   ÚlockÚassertFalse)r   Úfls     r   Útest_noKillCallzUtilTests.test_noKillCally   sa   € ð 	�
Š
•8˜V TÑ*Ô*Ð*ÝÔ$ T§[¢[¡]¤]Ñ3Ô3ˆØ
�Š‰	Œ	ˆ	Ø×Ò˜Ÿš™œÑ#Ô#Ð#Ð#Ð#r    N©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r	   Ú	isWindowsr0   r4   r?   r   ÚskipKillÚskipKillReasonrE   rH   rN   © r    r   r   r   #   s4  € € € € € ðð ð2ð 2ð 2ð 2ð €ZØˆÔÑÔØOñô ð/ð /ð /ñ	ô ð/ð$2ð 2ð 2ð 2ð €ZØˆÔÑÔØTñô ð2ð 2ð 2ñ	ô ð2ð$ €VˆH�nÑ%Ô%ð&ð &ð &ñ &Ô%ð&ð €VˆH�nÑ%Ô%ð1ð 1ð 1ñ &Ô%ð1ð	$ð 	$ð 	$ð 	$ð 	$ð 	$r    r   c                  ó–  — e Zd Zdd„Zdd„Z e ej        ¦   «         d¦  «        dd„¦   «         Zdd	„Z	dd
„Z
dd„Zdd„Zdd„Z e ej        ¦   «         d¦  «        dd„¦   «         Z e ej        ¦   «         d¦  «        dd„¦   «         Zdd„Zdd„Z e ej        ¦   «         d¦  «        dd„¦   «         Zdd„Zdd„Zdd„Zdd„Zdd„ZdS ) ÚLockingTestsr   Úintr   r   c                ó  ‡— dˆfd„}|                       t          d|¦  «         |                      ¦   «         }t          j        |¦  «        }|                      t
          |j        ¦  «        }|                      |j        ‰¦  «         d S )	NÚsourcer$   Údestr   r   c                ó$   •— t          ‰d ¦  «        ‚r'   )r   )r\   r]   r   s     €r   ÚfakeSymlinkz3LockingTests._symlinkErrorTest.<locals>.fakeSymlink‡   s   ø€ Ý˜% Ñ&Ô&Ð&r    r   )r\   r$   r]   r$   r   r   )	r.   r   r   rJ   r   r   rK   r   r   )r   r   r_   ÚlockfrK   r   s    `    r   Ú_symlinkErrorTestzLockingTests._symlinkErrorTest†   s‹   ø€ ð	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	�
Š
•8˜Y¨Ñ4Ô4Ð4à—’‘”ˆÝÔ& uÑ-Ô-ˆØ×Ò¥¨¬Ñ3Ô3ˆØ×Ò˜œ EÑ*Ô*Ð*Ð*Ð*r    c                óD   — |                       t          j        ¦  «         dS )z†
        An exception raised by C{symlink} other than C{EEXIST} is passed up to
        the caller of L{FilesystemLock.lock}.
        N)ra   r   ÚENOSYSrD   s    r   Útest_symlinkErrorzLockingTests.test_symlinkError‘   s    € ð
 	×Ò�uœ|Ñ,Ô,Ð,Ð,Ð,r    z9POSIX-specific error propagation not expected on Windows.c                ó‚   — |                       t          j        ¦  «         |                       t          j        ¦  «         dS )a   
        An L{OSError} raised by C{symlink} on a POSIX platform with an errno of
        C{EACCES} or C{EIO} is passed to the caller of L{FilesystemLock.lock}.

        On POSIX, unlike on Windows, these are unexpected errors which cannot
        be handled by L{FilesystemLock}.
        N)ra   r   r;   r)   rD   s    r   Útest_symlinkErrorPOSIXz#LockingTests.test_symlinkErrorPOSIX˜   s6   € ð 	×Ò�uœ|Ñ,Ô,Ð,Ø×Ò�uœyÑ)Ô)Ð)Ð)Ð)r    c                ó  — |                       ¦   «         }t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                      |j        ¦  «         |                      |j        ¦  «         dS )z‹
        If the lock has never been held, it can be acquired and the C{clean}
        and C{locked} attributes are set to C{True}.
        N)r   r   rJ   Ú
assertTruerK   ÚcleanÚlocked©r   r`   rK   s      r   Útest_cleanlyAcquirez LockingTests.test_cleanlyAcquire§   si   € ð
 —’‘”ˆÝÔ& uÑ-Ô-ˆØ�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø�Š˜œ
Ñ#Ô#Ð#Ø�Š˜œÑ$Ô$Ð$Ð$Ð$r    c                óÞ  — |                       ¦   «         }t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                     ¦   «          |                      |j        ¦  «         t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                      |j        ¦  «         |                      |j        ¦  «         dS )zŒ
        If a lock is released cleanly, it can be re-acquired and the C{clean}
        and C{locked} attributes are set to C{True}.
        N)	r   r   rJ   rh   rK   ÚunlockrL   rj   ri   rk   s      r   Útest_cleanlyReleasez LockingTests.test_cleanlyRelease²   s¶   € ð
 —’‘”ˆÝÔ& uÑ-Ô-ˆØ�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø�Š‰ŒˆØ×Ò˜œÑ%Ô%Ð%åÔ& uÑ-Ô-ˆØ�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø�Š˜œ
Ñ#Ô#Ð#Ø�Š˜œÑ$Ô$Ð$Ð$Ð$r    c                óN  — |                       ¦   «         }t          j        |¦  «        }|                      |                     ¦   «         ¦  «         t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                      |j        ¦  «         dS )zK
        If a lock is currently locked, it cannot be locked again.
        N)r   r   rJ   rh   rK   rL   rj   )r   r`   Ú	firstLockÚ
secondLocks       r   Útest_cannotLockLockedz"LockingTests.test_cannotLockLockedÂ   sˆ   € ð —’‘”ˆÝÔ+¨EÑ2Ô2ˆ	Ø�Š˜	ŸšÑ(Ô(Ñ)Ô)Ð)åÔ,¨UÑ3Ô3ˆ
Ø×Ò˜ŸšÑ*Ô*Ñ+Ô+Ð+Ø×Ò˜Ô*Ñ+Ô+Ð+Ð+Ð+r    c                ó&  ‡— dŠd
ˆfd„}|                       ¦   «         }|                      t          d|¦  «         t          j        t	          ‰¦  «        |¦  «         t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                      |j	        ¦  «         |                      |j
        ¦  «         |                      t          j        |¦  «        t	          t          j        ¦   «         ¦  «        ¦  «         d	S )zÇ
        If a lock was held by a process which no longer exists, it can be
        acquired, the C{clean} attribute is set to C{False}, and the
        C{locked} attribute is set to C{True}.
        i90  ÚpidrZ   Úsignalr   r   c                óˆ   •— |dk    rt          t          j        d ¦  «        ‚| ‰k    rt          t          j        d ¦  «        ‚d S )Nr   ©r   r   ÚEPERMrG   )ru   rv   Úowners     €r   ÚfakeKillz4LockingTests.test_uncleanlyAcquire.<locals>.fakeKillÖ   s@   ø€ Ø˜Š{ˆ{Ý�eœk¨4Ñ0Ô0Ð0Ø�eŠ|ˆ|Ý�eœk¨4Ñ0Ô0Ð0ð ˆ|r    rA   N©ru   rZ   rv   rZ   r   r   )r   r.   r   r   r$   rJ   rh   rK   rL   ri   rj   r   r2   rB   rC   )r   r{   r`   rK   rz   s       @r   Útest_uncleanlyAcquirez"LockingTests.test_uncleanlyAcquireÎ   sï   ø€ ð ˆð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð —’‘”ˆØ�
Š
•8˜V XÑ.Ô.Ð.ÝÔ�˜U™œ UÑ+Ô+Ð+åÔ& uÑ-Ô-ˆØ�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø×Ò˜œÑ$Ô$Ð$Ø�Š˜œÑ$Ô$Ð$à×Ò�Ô*¨5Ñ1Ô1µ3µr´y±{´{Ñ3CÔ3CÑDÔDÐDÐDÐDr    c                óÚ  ‡‡— dˆˆfd„}|                       t          d|¦  «        Šdd
„}|                       t          d|¦  «         |                      ¦   «         Št          j        ‰¦  «        }t          j        t          d¦  «        ‰¦  «         |                      |                     ¦   «         ¦  «         |                      |j        ¦  «         |                      |j	        ¦  «         dS )zð
        If the lock is initially held but then released before it can be
        examined to determine if the process which held it still exists, it is
        acquired and the C{clean} and C{locked} attributes are set to C{True}.
        r   r$   r   c                ó|   •— t          j        ‰¦  «         ‰                     ¦   «          t          j        | ¦  «        S r'   )r   ÚrmlinkÚrestorer2   )r   r`   ÚreadlinkPatchs    €€r   ÚfakeReadlinkz?LockingTests.test_lockReleasedBeforeCheck.<locals>.fakeReadlinkî   s6   ø€ åŒO˜EÑ"Ô"Ð"à×!Ò!Ñ#Ô#Ð#ÝÔ$ TÑ*Ô*Ð*r    r2   ru   rZ   rv   r   c                ó†   — |dk    rt          t          j        d ¦  «        ‚| dk    rt          t          j        d ¦  «        ‚d S ©Nr   éu¨  rx   ©ru   rv   s     r   r{   z;LockingTests.test_lockReleasedBeforeCheck.<locals>.fakeKill÷   ó?   € Ø˜Š{ˆ{Ý�eœk¨4Ñ0Ô0Ð0Ø�eŠ|ˆ|Ý�eœk¨4Ñ0Ô0Ð0ð ˆ|r    rA   r†   N)r   r$   r   r$   r|   ©
r.   r   r   rJ   r   r$   rh   rK   ri   rj   )r   rƒ   r{   rK   r`   r‚   s       @@r   Útest_lockReleasedBeforeCheckz)LockingTests.test_lockReleasedBeforeCheckç   sè   øø€ ð	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð Ÿ
š
¥8¨Z¸ÑFÔFˆð	1ð 	1ð 	1ð 	1ð 	�
Š
•8˜V XÑ.Ô.Ð.à—’‘”ˆÝÔ& uÑ-Ô-ˆÝÔ�˜U™œ UÑ+Ô+Ð+Ø�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø�Š˜œ
Ñ#Ô#Ð#Ø�Š˜œÑ$Ô$Ð$Ð$Ð$r    r!   c                ó  — d	d„}|                       t          d|¦  «         |                      ¦   «         }t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                      |j        ¦  «         dS )
a“  
        If the lock is released while an attempt is made to acquire
        it, the lock attempt fails and C{FilesystemLock.lock} returns
        C{False}.  This can happen on Windows when L{lockfile.symlink}
        fails with L{IOError} of C{EIO} because another process is in
        the middle of a call to L{os.rmdir} (implemented in terms of
        RemoveDirectory) which is not atomic.
        r#   r$   r%   r   r   c                ó6   — t          t          j        d ¦  «        ‚r'   r(   r*   s     r   r_   zGLockingTests.test_lockReleasedDuringAcquireSymlink.<locals>.fakeSymlink  s   € õ �%œ) TÑ*Ô*Ð*r    r   Nr-   )r.   r   r   rJ   rL   rK   rj   )r   r_   r`   rK   s       r   Ú%test_lockReleasedDuringAcquireSymlinkz2LockingTests.test_lockReleasedDuringAcquireSymlink  sƒ   € ð	+ð 	+ð 	+ð 	+ð
 	�
Š
•8˜Y¨Ñ4Ô4Ð4à—’‘”ˆÝÔ& uÑ-Ô-ˆØ×Ò˜Ÿš™œÑ%Ô%Ð%Ø×Ò˜œÑ%Ô%Ð%Ð%Ð%r    r5   c                ó\  — d	d„}|                       t          d|¦  «         |                      ¦   «         }t          j        |¦  «        }t          j        t          d¦  «        |¦  «         |                      |                     ¦   «         ¦  «         |                      |j        ¦  «         dS )
z»
        If the lock is initially held but is released while an attempt
        is made to acquire it, the lock attempt fails and
        L{FilesystemLock.lock} returns C{False}.
        r   r$   r   r   c                ó6   — t          t          j        d ¦  «        ‚r'   r:   ©r   s    r   rƒ   zILockingTests.test_lockReleasedDuringAcquireReadlink.<locals>.fakeReadlink+  s   € õ �%œ,¨Ñ-Ô-Ð-r    r2   r†   N©r   r$   r   r   )	r.   r   r   rJ   r   r$   rL   rK   rj   )r   rƒ   r`   rK   s       r   Ú&test_lockReleasedDuringAcquireReadlinkz3LockingTests.test_lockReleasedDuringAcquireReadlink   sœ   € ð	.ð 	.ð 	.ð 	.ð 	�
Š
•8˜Z¨Ñ6Ô6Ð6à—’‘”ˆÝÔ& uÑ-Ô-ˆÝÔ�˜U™œ UÑ+Ô+Ð+Ø×Ò˜Ÿš™œÑ%Ô%Ð%Ø×Ò˜œÑ%Ô%Ð%Ð%Ð%r    ÚexceptionTypeútype[OSError] | type[IOError]c                ó„  ‡‡— dˆˆfd„}|                       t          d|¦  «         |                      ¦   «         }t          j        t	          d¦  «        |¦  «         t          j        |¦  «        }|                      ‰|j        ¦  «        }|                      |j	        ‰¦  «         |  
                    |j        ¦  «         d S )	Nr   r$   r   r   c                ó   •—  ‰‰d ¦  «        ‚r'   rW   )r   r   r“   s    €€r   rƒ   z5LockingTests._readlinkErrorTest.<locals>.fakeReadlink<  s   ø€ Ø�-  tÑ,Ô,Ð,r    r2   r†   r‘   )r.   r   r   r   r$   rJ   r   rK   r   r   rL   rj   )r   r“   r   rƒ   r`   rK   r   s    ``    r   Ú_readlinkErrorTestzLockingTests._readlinkErrorTest9  sÂ   øø€ ð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	�
Š
•8˜Z¨Ñ6Ô6Ð6à—’‘”ˆõ 	Ô�˜U™œ UÑ+Ô+Ð+åÔ& uÑ-Ô-ˆØ×Ò ¨t¬yÑ9Ô9ˆØ×Ò˜œ EÑ*Ô*Ð*Ø×Ò˜œÑ%Ô%Ð%Ð%Ð%r    c                óš   — |                       t          t          j        ¦  «         |                       t          t          j        ¦  «         dS )z‡
        An exception raised by C{readlink} other than C{ENOENT} is passed up to
        the caller of L{FilesystemLock.lock}.
        N)r—   r   r   rc   r/   rD   s    r   Útest_readlinkErrorzLockingTests.test_readlinkErrorK  s:   € ð
 	×Ò¥­¬Ñ6Ô6Ð6Ø×Ò¥­¬Ñ6Ô6Ð6Ð6Ð6r    c                óš   — |                       t          t          j        ¦  «         |                       t          t          j        ¦  «         dS )zú
        Any L{IOError} raised by C{readlink} on a POSIX platform passed to the
        caller of L{FilesystemLock.lock}.

        On POSIX, unlike on Windows, these are unexpected errors which cannot
        be handled by L{FilesystemLock}.
        N)r—   r/   r   rc   r;   rD   s    r   Útest_readlinkErrorPOSIXz$LockingTests.test_readlinkErrorPOSIXS  s:   € ð 	×Ò¥­¬Ñ6Ô6Ð6Ø×Ò¥­¬Ñ6Ô6Ð6Ð6Ð6r    c                óÚ  ‡‡— dˆˆfd„}|                       t          d|¦  «        Šdd
„}|                       t          d|¦  «         |                      ¦   «         Št          j        ‰¦  «        }t          j        t          d¦  «        ‰¦  «         |                      |                     ¦   «         ¦  «         |                      |j        ¦  «         |                      |j	        ¦  «         dS )z×
        If a second process cleans up the lock after a first one checks the
        lock and finds that no process is holding it, the first process does
        not fail when it tries to clean up the lock.
        r   r$   r   r   c                ó|   •— ‰                      ¦   «          t          j        ‰¦  «         t          j        | ¦  «        S r'   )r�   r   r€   )r   r`   ÚrmlinkPatchs    €€r   Ú
fakeRmlinkz?LockingTests.test_lockCleanedUpConcurrently.<locals>.fakeRmlinki  s5   ø€ Ø×ÒÑ!Ô!Ð!åŒO˜EÑ"Ô"Ð"å”? 4Ñ(Ô(Ð(r    r€   ru   rZ   rv   c                ó†   — |dk    rt          t          j        d ¦  «        ‚| dk    rt          t          j        d ¦  «        ‚d S r…   rx   r‡   s     r   r{   z=LockingTests.test_lockCleanedUpConcurrently.<locals>.fakeKillr  rˆ   r    rA   r†   N)r   r$   r   r   r|   r‰   )r   rŸ   r{   rK   r`   rž   s       @@r   Útest_lockCleanedUpConcurrentlyz+LockingTests.test_lockCleanedUpConcurrentlyb  sè   øø€ ð	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð —j’j¥¨8°ZÑ@Ô@ˆð	1ð 	1ð 	1ð 	1ð 	�
Š
•8˜V XÑ.Ô.Ð.à—’‘”ˆÝÔ& uÑ-Ô-ˆÝÔ�˜U™œ UÑ+Ô+Ð+Ø�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø�Š˜œ
Ñ#Ô#Ð#Ø�Š˜œÑ$Ô$Ð$Ð$Ð$r    c                óØ  — dd„}|                       t          d|¦  «         dd„}|                       t          d|¦  «         |                      ¦   «         }t          j        t	          d¦  «        |¦  «         t          j        |¦  «        }|                      t          |j        ¦  «        }|  	                    |j
        t          j        ¦  «         |                      |j        ¦  «         dS )z…
        An exception raised by L{rmlink} other than C{ENOENT} is passed up
        to the caller of L{FilesystemLock.lock}.
        r   r$   r   r   c                ó6   — t          t          j        d ¦  «        ‚r'   )r   r   rc   r�   s    r   rŸ   z1LockingTests.test_rmlinkError.<locals>.fakeRmlink‡  r=   r    r€   ru   rZ   rv   r   c                ó†   — |dk    rt          t          j        d ¦  «        ‚| dk    rt          t          j        d ¦  «        ‚d S r…   rx   r‡   s     r   r{   z/LockingTests.test_rmlinkError.<locals>.fakeKillŒ  rˆ   r    rA   r†   Nr‘   r|   )r.   r   r   r   r$   rJ   r   r   rK   r   r   rc   rL   rj   )r   rŸ   r{   r`   rK   r   s         r   Útest_rmlinkErrorzLockingTests.test_rmlinkError�  sß   € ð	.ð 	.ð 	.ð 	.ð 	�
Š
•8˜X zÑ2Ô2Ð2ð	1ð 	1ð 	1ð 	1ð 	�
Š
•8˜V XÑ.Ô.Ð.à—’‘”ˆõ 	Ô�˜U™œ UÑ+Ô+Ð+åÔ& uÑ-Ô-ˆØ×Ò¥¨¬Ñ3Ô3ˆØ×Ò˜œ¥E¤LÑ1Ô1Ð1Ø×Ò˜œÑ%Ô%Ð%Ð%Ð%r    c                ó˜  — d
d„}|                       t          d|¦  «         |                      ¦   «         }t          j        t	          d¦  «        |¦  «         t          j        |¦  «        }|                      t          |j        ¦  «        }|  	                    |j
        t          j        ¦  «         |                      |j        ¦  «         d	S )z¶
        If L{kill} raises an exception other than L{OSError} with errno set to
        C{ESRCH}, the exception is passed up to the caller of
        L{FilesystemLock.lock}.
        ru   rZ   rv   r   r   c                ó6   — t          t          j        d ¦  «        ‚r'   )r   r   ry   r‡   s     r   r{   z-LockingTests.test_killError.<locals>.fakeKill¥  s   € Ý�%œ+ tÑ,Ô,Ð,r    rA   r†   N)ru   rZ   rv   rZ   r   r   )r.   r   r   r   r$   rJ   r   r   rK   r   r   ry   rL   rj   )r   r{   r`   rK   r   s        r   Útest_killErrorzLockingTests.test_killErrorž  s³   € ð	-ð 	-ð 	-ð 	-ð 	�
Š
•8˜V XÑ.Ô.Ð.à—’‘”ˆõ 	Ô�˜U™œ UÑ+Ô+Ð+åÔ& uÑ-Ô-ˆØ×Ò¥¨¬Ñ3Ô3ˆØ×Ò˜œ¥E¤KÑ0Ô0Ð0Ø×Ò˜œÑ%Ô%Ð%Ð%Ð%r    c                ó  — |                       ¦   «         }t          j        t          t	          j        ¦   «         dz   ¦  «        |¦  «         t          j        |¦  «        }|                      t          |j	        ¦  «         dS )z‚
        L{FilesystemLock.unlock} raises L{ValueError} if called for a lock
        which is held by a different process.
        é   N)
r   r   r   r$   rB   rC   rJ   r   Ú
ValueErrorrn   rk   s      r   Útest_unlockOtherzLockingTests.test_unlockOther´  sd   € ð
 —’‘”ˆÝÔ��RœY™[œ[¨1™_Ñ-Ô-¨uÑ5Ô5Ð5ÝÔ& uÑ-Ô-ˆØ×Ò�* d¤kÑ2Ô2Ð2Ð2Ð2r    c                ó¶  — |                       ¦   «         }|                      t          j        |¦  «        ¦  «         t          j        |¦  «        }|                      |                     ¦   «         ¦  «         |                      t          j        |¦  «        ¦  «         |                     ¦   «          |                      t          j        |¦  «        ¦  «         dS )zp
        L{isLocked} returns C{True} if the named lock is currently locked,
        C{False} otherwise.
        N)r   rL   r   ÚisLockedrJ   rh   rK   rn   rk   s      r   Útest_isLockedzLockingTests.test_isLocked¾  s©   € ð
 —’‘”ˆØ×Ò�Ô*¨5Ñ1Ô1Ñ2Ô2Ð2ÝÔ& uÑ-Ô-ˆØ�Š˜Ÿ	š	™œÑ$Ô$Ð$Ø�Š�Ô)¨%Ñ0Ô0Ñ1Ô1Ð1Ø�Š‰ŒˆØ×Ò�Ô*¨5Ñ1Ô1Ñ2Ô2Ð2Ð2Ð2r    N)r   rZ   r   r   rO   )r“   r”   r   rZ   r   r   )rP   rQ   rR   ra   rd   r   r	   rT   rf   rl   ro   rs   r}   rŠ   r   r�   r’   r—   r™   r›   r¡   r¥   r¨   r¬   r¯   rW   r    r   rY   rY   …   s0  € € € € € ð	+ð 	+ð 	+ð 	+ð-ð -ð -ð -ð €VØˆÔÑÔØCñô ð	*ð 	*ð 	*ñ	ô ð	*ð	%ð 	%ð 	%ð 	%ð%ð %ð %ð %ð 
,ð 
,ð 
,ð 
,ðEð Eð Eð Eð2%ð %ð %ð %ð> €ZØˆÔÑÔØOñô ð&ð &ð &ñ	ô ð&ð, €ZØˆÔÑÔØTñô ð&ð &ð &ñ	ô ð&ð*&ð &ð &ð &ð$7ð 7ð 7ð 7ð €VØˆÔÑÔØCñô ð	7ð 	7ð 	7ñ	ô ð	7ð%ð %ð %ð %ð>&ð &ð &ð &ð:&ð &ð &ð &ð,3ð 3ð 3ð 3ð3ð 3ð 3ð 3ð 3ð 3r    rY   )rS   Ú
__future__r   r   rB   Úunittestr   r   Útyping_extensionsr   Útwisted.pythonr   Útwisted.python.reflectr   Útwisted.python.runtimer	   Útwisted.trial.unittestr
   rU   rV   rT   r   rY   rW   r    r   ú<module>r·      se  ðð
ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à &Ð &Ð &Ð &Ð &Ð &à #Ð #Ð #Ð #Ð #Ð #Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +à€Ø€Ø€8ÔÑÔð 	
àˆÐ,Ñ-Ô-Ð5ØˆM˜,Ñ'Ô'Ð/àˆð<ð 	ð_$ð _$ð _$ð _$ð _$�ñ _$ô _$ð _$ðDD3ð D3ð D3ð D3ð D3�8ñ D3ô D3ð D3ð D3ð D3r    