Ë
    oj<  ã                   ó�  — d Z ddlZddlZddlm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  G d	„ d
ej                   «      Z G d„ dej$                  «      Z G d„ dej$                  «      Z G d„ de«      Z G d„ dej                   «      Z ej0                  dd«      dd dk(  rdZdZndZdZ G d„ dej                   «      Zy)z0
Test cases for twisted.protocols.ident module.
é    N)ÚStringIO)ÚdeferÚerror)ÚStringTransport)Úident)Úfailure)Úunittestc                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚClassParserTestsz*
    Test parsing of ident responses.
    c                 ó6   — t        j                  «       | _        y)z7
        Create an ident client used in tests.
        N)r   ÚIdentClientÚclient©Úselfs    ú9/usr/lib/python3/dist-packages/twisted/test/test_ident.pyÚsetUpzClassParserTests.setUp   s   € ô ×'Ñ'Ó)ˆ�ó    c                 óð   — t        j                  «       }| j                  j                  j	                  |ddf«       | j                  j                  d«       | j                  |t        j                  «      S )zX
        'UNKNOWN-ERROR' error should map to the L{ident.IdentError} exception.
        é{   éÈ  z 123, 456 : ERROR : UNKNOWN-ERROR)	r   ÚDeferredr   ÚqueriesÚappendÚlineReceivedÚassertFailurer   Ú
IdentError©r   Úds     r   Útest_indentErrorz!ClassParserTests.test_indentError   sZ   € ô �N‰NÓˆØ�‰×Ñ×"Ñ" A s¨C =Ô1Ø�‰× Ñ Ð!CÔDØ×!Ñ! !¤U×%5Ñ%5Ó6Ð6r   c                 óð   — t        j                  «       }| j                  j                  j	                  |ddf«       | j                  j                  d«       | j                  |t        j                  «      S )zN
        'NO-USER' error should map to the L{ident.NoUser} exception.
        éê   r   z234, 456 : ERROR : NO-USER)	r   r   r   r   r   r   r   r   ÚNoUserr   s     r   Útest_noUSerErrorz!ClassParserTests.test_noUSerError(   sX   € ô �N‰NÓˆØ�‰×Ñ×"Ñ" A s¨C =Ô1Ø�‰× Ñ Ð!=Ô>Ø×!Ñ! !¤U§\¡\Ó2Ð2r   c                 óð   — t        j                  «       }| j                  j                  j	                  |ddf«       | j                  j                  d«       | j                  |t        j                  «      S )zX
        'INVALID-PORT' error should map to the L{ident.InvalidPort} exception.
        iY  é7  z 345, 567 :  ERROR : INVALID-PORT)	r   r   r   r   r   r   r   r   ÚInvalidPortr   s     r   Útest_invalidPortErrorz&ClassParserTests.test_invalidPortError1   sZ   € ô �N‰NÓˆØ�‰×Ñ×"Ñ" A s¨C =Ô1Ø�‰× Ñ Ð!CÔDØ×!Ñ! !¤U×%6Ñ%6Ó7Ð7r   c                 óð   — t        j                  «       }| j                  j                  j	                  |ddf«       | j                  j                  d«       | j                  |t        j                  «      S )zV
        'HIDDEN-USER' error should map to the L{ident.HiddenUser} exception.
        r%   i  z567, 789 : ERROR : HIDDEN-USER)	r   r   r   r   r   r   r   r   Ú
HiddenUserr   s     r   Útest_hiddenUserErrorz%ClassParserTests.test_hiddenUserError:   sZ   € ô �N‰NÓˆØ�‰×Ñ×"Ñ" A s¨C =Ô1Ø�‰× Ñ Ð!AÔBØ×!Ñ! !¤U×%5Ñ%5Ó6Ð6r   c                 ó:  — t        j                  «       }| j                  j                  j	                  |ddf«       | j                  j                  t        j                  t        j                  «       «      «       | j                  |t        j                  «      S )zy
        A pending query which failed because of a ConnectionLost should
        receive an L{ident.IdentError}.
        iý  i°  )r   r   r   r   r   ÚconnectionLostr   ÚFailurer   ÚConnectionLostr   r   r   r   s     r   Útest_lostConnectionz$ClassParserTests.test_lostConnectionC   sk   € ô
 �N‰NÓˆØ�‰×Ñ×"Ñ" A s¨C =Ô1Ø�‰×"Ñ"¤7§?¡?´5×3GÑ3GÓ3IÓ#JÔKØ×!Ñ! !¤U×%5Ñ%5Ó6Ð6r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r'   r*   r/   © r   r   r   r      s%   „ ñò*ò7ò3ò8ò7ó7r   r   c                   ó   — e Zd Zd„ Zy)ÚTestIdentServerc                 ó   — | j                   S ©N)ÚresultValue©r   ÚserverAddressÚclientAddresss      r   ÚlookupzTestIdentServer.lookupO   s   € Ø×ÑÐr   N©r0   r1   r2   r=   r4   r   r   r6   r6   N   s   „ ó r   r6   c                   ó   — e Zd Zd„ Zy)ÚTestErrorIdentServerc                 ó"   — | j                  «       ‚r8   )ÚexceptionTyper:   s      r   r=   zTestErrorIdentServer.lookupT   s   € Ø× Ñ Ó"Ð"r   Nr>   r4   r   r   r@   r@   S   s   „ ó#r   r@   c                   ó   — e Zd Zy)ÚNewExceptionN)r0   r1   r2   r4   r   r   rD   rD   X   s   „ Ør   rD   c                   ó   — e Zd Zd„ Zd„ Zy)ÚServerParserTestsc                 ó®  — t        «       }|j                  t        «       «       g }|j                  |_        t
        j                  |_        |j                  d«       | j                  |d   d«       t
        j                  |_        |j                  d«       | j                  |d   d«       t
        j                  |_        |j                  d«       | j                  |d   d	«       t
        j                  |_        |j                  d
«       | j                  |d   d«       t        |_        |j                  d«       | j                  |d   d«       | j                  t        «      }| j                  t        |«      d«       dD ]M  }|d d …= |j                  d|fz  «       |j                  d|fz  «       | j                  |d|fz  d|fz  g«       ŒO y )Nz123, 345r   z 123, 345 : ERROR : UNKNOWN-ERRORz432, 210é   z432, 210 : ERROR : NO-USERz987, 654é   z987, 654 : ERROR : INVALID-PORTz756, 827é   z756, 827 : ERROR : HIDDEN-USERz987, 789é   z 987, 789 : ERROR : UNKNOWN-ERROR)éÿÿÿÿr   i   i  z%d, 5z5, %dz%d, 5 : ERROR : INVALID-PORTz5, %d : ERROR : INVALID-PORT)r@   ÚmakeConnectionr   r   ÚsendLiner   r   rB   r   ÚassertEqualr"   r&   r)   rD   ÚflushLoggedErrorsÚlen)r   ÚpÚLÚerrsÚports        r   Ú
testErrorszServerParserTests.testErrors]   s“  € Ü Ó"ˆØ	×ÑœÓ*Ô+ØˆØ—X‘XˆŒ
ä×*Ñ*ˆŒØ	�‰�zÔ"Ø×Ñ˜˜1™ÐAÔBäŸ,™,ˆŒØ	�‰�zÔ"Ø×Ñ˜˜1™Ð;Ô<ä×+Ñ+ˆŒØ	�‰�zÔ"Ø×Ñ˜˜1™Ð@ÔAä×*Ñ*ˆŒØ	�‰�zÔ"Ø×Ñ˜˜1™Ð?Ô@ä&ˆŒØ	�‰�zÔ"Ø×Ñ˜˜1™ÐAÔBØ×%Ñ%¤lÓ3ˆØ×Ñœ˜T› AÔ&à'ò 
	ˆDØ’!�Ø�N‰N˜7 d WÑ,Ô-Ø�N‰N˜7 d WÑ,Ô-Ø×ÑØà2°d°WÑ<Ø2°d°WÑ<ðõñ	
	r   c                 óÊ   — t        «       }|j                  t        «       «       g }|j                  |_        d|_        |j                  d«       | j                  |d   d«       y )N)ÚSYSÚUSERz123, 456r   z123, 456 : USERID : SYS : USER)r6   rM   r   r   rN   r9   r   rO   )r   rR   rS   s      r   ÚtestSuccesszServerParserTests.testSuccess…   sS   € ÜÓˆØ	×ÑœÓ*Ô+ØˆØ—X‘XˆŒ
à'ˆŒØ	�‰�zÔ"Ø×Ñ˜˜1™Ð?Õ@r   N)r0   r1   r2   rV   rZ   r4   r   r   rF   rF   \   s   „ ò&óPAr   rF   z=LrH   ó   Ú0100007FÚ04030201Ú7F000001Ú01020304c                   óL   — e Zd Zde›de›d�Zdez   Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚProcMixinTestsz4: z:0019 z]:02FA 0A 00000000:00000000 00:00000000 00000000     0        0 10927 1 f72a5b80 3000 0 0 2 -1zd  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
   c                 óv   — t        j                  «       }| j                  |j                  t        «      d«       y )Nú	127.0.0.1)r   ÚProcServerMixinrO   ÚdottedQuadFromHexStringÚ_addr1©r   rR   s     r   ÚtestDottedQuadFromHexStringz*ProcMixinTests.testDottedQuadFromHexString£   s+   € Ü×!Ñ!Ó#ˆØ×Ñ˜×2Ñ2´6Ó:¸KÕHr   c                 ó|   — t        j                  «       }| j                  |j                  t        dz   «      d«       y )Nz:0277)rc   iw  )r   rd   rO   ÚunpackAddressrf   rg   s     r   ÚtestUnpackAddressz ProcMixinTests.testUnpackAddress§   s/   € Ü×!Ñ!Ó#ˆØ×Ñ˜Ÿ™¬°'Ñ)9Ó:Ð<NÕOr   c                 ó‚   — t        j                  «       }| j                  |j                  | j                  «      d«       y )N)©rc   é   ©ú1.2.3.4éú  r   )r   rd   rO   Ú	parseLineÚlinerg   s     r   ÚtestLineParserzProcMixinTests.testLineParser«   s1   € Ü×!Ñ!Ó#ˆØ×ÑØ�K‰K˜Ÿ	™	Ó"Ð$Lõ	
r   c                 óÞ   ‡ ‡— g Št        j                  «       }ˆ fd„|_        ˆfd„|_        ‰ j	                  |j                  dd«      |j                  df«       ‰ j	                  ‰dg«       y )Nc                  ó0   •— t        ‰ j                  g«      S r8   ©Úiterrs   r   s   €r   ú<lambda>z4ProcMixinTests.testExistingAddress.<locals>.<lambda>´   ó   ø€ œD $§)¡) Ó-€ r   c                 ó0   •— ‰j                  | «      dfd   S )NÚrootrH   )r   )ÚuidÚusernames    €r   ry   z4ProcMixinTests.testExistingAddress.<locals>.<lambda>µ   s   ø€  X§_¡_°SÓ%9¸6Ð$BÀ1Ñ$E€ r   rm   ro   r|   r   )r   rd   ÚentriesÚgetUsernamerO   r=   ÚSYSTEM_NAME)r   rR   r~   s   ` @r   ÚtestExistingAddressz"ProcMixinTests.testExistingAddress±   sa   ù€ ØˆÜ×!Ñ!Ó#ˆÛ-ˆŒ	ÛEˆŒØ×ÑØ�H‰HÐ&Ð(8Ó9¸A¿M¹MÈ6Ð;Rô	
ð 	×Ñ˜ A 3Õ'r   c                 óJ  ‡ — t        j                  «       }ˆ fd„|_        ‰ j                  t         j                  |j
                  dd«       ‰ j                  t         j                  |j
                  dd«       ‰ j                  t         j                  |j
                  dd«       y )Nc                  ó0   •— t        ‰ j                  g«      S r8   rw   r   s   €r   ry   z7ProcMixinTests.testNonExistingAddress.<locals>.<lambda>½   rz   r   ©rc   é   ro   rm   )z1.2.3.5rq   )rp   iû  )r   rd   r   ÚassertRaisesr"   r=   rg   s   ` r   ÚtestNonExistingAddressz%ProcMixinTests.testNonExistingAddress»   sr   ø€ Ü×!Ñ!Ó#ˆÛ-ˆŒ	Ø×Ñœ%Ÿ,™,¨¯©Ð2CÐEUÔVØ×Ñœ%Ÿ,™,¨¯©Ð2CÐEUÔVØ×Ñœ%Ÿ,™,¨¯©Ð2CÐEUÕVr   c                 óð   ‡ ‡— g Šˆˆ fd„}‰ j                  t        d|«       t        j                  «       }‰ j	                  t        j
                  |j                  dd«       ‰ j                  di fg‰«       y)zS
        L{ident.ProcServerMixin.lookup} uses the Linux TCP process table.
        c                  óT   •— ‰j                  | |f«       t        ‰j                  «      S )z[
            Mock for the open call to prevent actually opening /proc/net/tcp.
            )r   r   Ú
sampleFile)ÚargsÚkwargsÚ
open_callsr   s     €€r   Úmocked_openz8ProcMixinTests.testLookupProcNetTcp.<locals>.mocked_openÈ   s&   ø€ ð ×Ñ˜t V˜nÔ-Ü˜DŸO™OÓ,Ð,r   Úopenr…   ro   )z/proc/net/tcpN)ÚpatchÚbuiltinsr   rd   r‡   r"   r=   rO   )r   r�   rR   rŽ   s   `  @r   ÚtestLookupProcNetTcpz#ProcMixinTests.testLookupProcNetTcpÂ   sf   ù€ ð ˆ
õ	-ð 	�
‰
”8˜V [Ô1ä×!Ñ!Ó#ˆØ×Ñœ%Ÿ,™,¨¯©Ð2CÐEUÔVØ×ÑÐ-¨rÐ2Ð3°ZÕ@r   N)r0   r1   r2   rf   Ú_addr2rs   r‹   rh   rk   rt   r‚   rˆ   r“   r4   r   r   ra   ra   ˜   sD   … ò
 
’ð	€Dð	6Ø8<ñ	=ð ò
IòPò
ò(òWóAr   ra   )r3   r’   ÚstructÚior   Útwisted.internetr   r   Útwisted.internet.testingr   Útwisted.protocolsr   Útwisted.pythonr   Útwisted.trialr	   ÚTestCaser   ÚIdentServerr6   r@   ÚRuntimeErrorrD   rF   Úpackrf   r”   ra   r4   r   r   ú<module>r       sÂ   ðñ
ó Û Ý ç )Ý 4Ý #Ý "Ý "ô77�x×(Ñ(ô 77ôt �e×'Ñ'ô  ô
#˜5×,Ñ,ô #ô
	�<ô 	ô1A˜×)Ñ)ô 1Aðh €6‡;�;ˆt�QÓ˜˜!Ð Ò'Ø€FØ�Fà€FØ€Fô;A�X×&Ñ&õ ;Ar   