U
    
W[g  ã                   @   s$  d 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dlmZ dd	lmZ zddlZW n ek
rˆ   ddlZY nX G d
d„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ dejƒZe dd¡dd… dkrdZdZndZdZG dd„ dejƒZdS )z0
Test cases for twisted.protocols.ident module.
é    N)Úident)Úfailure)Úerror)Údefer)ÚNativeStringIO)Úunittest)ÚStringTransportc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚClassParserTestsz*
    Test parsing of ident responses.
    c                 C   s   t  ¡ | _dS )z7
        Create an ident client used in tests.
        N)r   ZIdentClientÚclient©Úself© r   ú9/usr/lib/python3/dist-packages/twisted/test/test_ident.pyÚsetUp!   s    zClassParserTests.setUpc                 C   s6   t  ¡ }| jj |ddf¡ | j d¡ |  |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   Údr   r   r   Útest_indentError(   s    z!ClassParserTests.test_indentErrorc                 C   s6   t  ¡ }| jj |ddf¡ | j d¡ |  |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   r   r   r   Útest_noUSerError2   s    z!ClassParserTests.test_noUSerErrorc                 C   s6   t  ¡ }| jj |ddf¡ | j d¡ |  |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   r   r   r   Útest_invalidPortError<   s    z&ClassParserTests.test_invalidPortErrorc                 C   s6   t  ¡ }| jj |ddf¡ | j d¡ |  |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   r   r   r   Útest_hiddenUserErrorF   s    z%ClassParserTests.test_hiddenUserErrorc                 C   s@   t  ¡ }| jj |ddf¡ | j t t 	¡ ¡¡ |  
|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   ZconnectionLostr   ZFailurer   ZConnectionLostr   r   r   r   r   r   r   Útest_lostConnectionP   s    z$ClassParserTests.test_lostConnectionN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r"   r#   r   r   r   r   r	      s   



r	   c                   @   s   e Zd Zdd„ ZdS )ÚTestIdentServerc                 C   s   | j S ©N)ÚresultValue©r   ZserverAddressZclientAddressr   r   r   Úlookup]   s    zTestIdentServer.lookupN©r$   r%   r&   r,   r   r   r   r   r(   \   s   r(   c                   @   s   e Zd Zdd„ ZdS )ÚTestErrorIdentServerc                 C   s   |   ¡ ‚d S r)   )ÚexceptionTyper+   r   r   r   r,   c   s    zTestErrorIdentServer.lookupNr-   r   r   r   r   r.   b   s   r.   c                   @   s   e Zd ZdS )ÚNewExceptionN)r$   r%   r&   r   r   r   r   r0   h   s   r0   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚServerParserTestsc                 C   s4  t ƒ }| tƒ ¡ g }|j|_tj|_| d¡ |  	|d d¡ tj
|_| d¡ |  	|d d¡ tj|_| d¡ |  	|d d	¡ tj|_| d
¡ |  	|d d¡ t|_| d¡ |  	|d d¡ |  t¡}|  	t|ƒd¡ dD ]J}|d d …= | d|f ¡ | d|f ¡ |  	|d|f d|f g¡ qäd S )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   r/   r   ÚassertEqualr   r   r!   r0   ZflushLoggedErrorsÚlen)r   ÚpÚLZerrsZportr   r   r   Ú
testErrorsn   s>    






 ÿÿzServerParserTests.testErrorsc                 C   sB   t ƒ }| tƒ ¡ g }|j|_d|_| d¡ |  |d d¡ d S )N)ZSYSZUSERz123, 456r   z123, 456 : USERID : SYS : USER)r(   r7   r   r   r8   r*   r   r9   )r   r;   r<   r   r   r   ÚtestSuccess“   s    
zServerParserTests.testSuccessN)r$   r%   r&   r=   r>   r   r   r   r   r1   m   s   %r1   z=Lr2   ó   Z0100007FZ04030201Z7F000001Z01020304c                   @   sP   e Zd Zdeef Zde Zdd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ ZdS )ÚProcMixinTestszj4: %s:0019 %s: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                 C   s   t  ¡ }|  | t¡d¡ d S )Nú	127.0.0.1)r   ÚProcServerMixinr9   ZdottedQuadFromHexStringÚ_addr1©r   r;   r   r   r   ÚtestDottedQuadFromHexString¯   s    z*ProcMixinTests.testDottedQuadFromHexStringc                 C   s"   t  ¡ }|  | td ¡d¡ d S )Nz:0277)rA   iw  )r   rB   r9   ZunpackAddressrC   rD   r   r   r   ÚtestUnpackAddress´   s    ÿz ProcMixinTests.testUnpackAddressc                 C   s    t  ¡ }|  | | j¡d¡ d S )N)©rA   é   ©ú1.2.3.4éú  r   )r   rB   r9   Z	parseLineÚlinerD   r   r   r   ÚtestLineParserº   s
    
þzProcMixinTests.testLineParserc                    sT   g ‰t  ¡ }‡ fdd„|_‡fdd„|_ˆ  | dd¡|jdf¡ ˆ  ˆdg¡ d S )Nc                      s   t ˆ jgƒS r)   ©ÚiterrL   r   r   r   r   Ú<lambda>Ä   ó    z4ProcMixinTests.testExistingAddress.<locals>.<lambda>c                    s   ˆ   | ¡dfd S )NÚrootr2   )r   )Zuid)Úusernamer   r   rP   Å   rQ   rG   rI   rR   r   )r   rB   ÚentriesZgetUsernamer9   r,   ZSYSTEM_NAMErD   r   )r   rS   r   ÚtestExistingAddressÁ   s    
þz"ProcMixinTests.testExistingAddressc                    sV   t  ¡ }‡ fdd„|_ˆ  t j|jdd¡ ˆ  t j|jdd¡ ˆ  t j|jdd¡ d S )Nc                      s   t ˆ jgƒS r)   rN   r   r   r   r   rP   Î   rQ   z7ProcMixinTests.testNonExistingAddress.<locals>.<lambda>©rA   é   rI   rG   )z1.2.3.5rK   )rJ   iû  )r   rB   rT   ÚassertRaisesr   r,   rD   r   r   r   ÚtestNonExistingAddressÌ   s    ÿÿÿz%ProcMixinTests.testNonExistingAddressc                    sR   g ‰ ‡ ‡fdd„}ˆ  td|¡ t ¡ }ˆ tj|jdd¡ ˆ di fgˆ ¡ dS )zS
        L{ident.ProcServerMixin.lookup} uses the Linux TCP process table.
        c                     s   ˆ   | |f¡ tˆjƒS )z[
            Mock for the open call to prevent actually opening /proc/net/tcp.
            )r   r   Ú
sampleFile)ÚargsÚkwargs©Z
open_callsr   r   r   Úmocked_openÝ   s    z8ProcMixinTests.testLookupProcNetTcp.<locals>.mocked_openÚopenrV   rI   )z/proc/net/tcpN)ZpatchÚbuiltinsr   rB   rX   r   r,   r9   )r   r^   r;   r   r]   r   ÚtestLookupProcNetTcp×   s    ÿz#ProcMixinTests.testLookupProcNetTcpN)r$   r%   r&   rC   Ú_addr2rL   rZ   rE   rF   rM   rU   rY   ra   r   r   r   r   r@   §   s   þÿr@   )r'   ZstructZtwisted.protocolsr   Ztwisted.pythonr   Ztwisted.internetr   r   Ztwisted.python.compatr   Ztwisted.trialr   Ztwisted.test.proto_helpersr   r`   ÚImportErrorZ__builtin__ZTestCaser	   ZIdentServerr(   r.   ÚRuntimeErrorr0   r1   ZpackrC   rb   r@   r   r   r   r   Ú<module>   s.   @1