U
    n5{i½  ã                   @   s”   d 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 dd	lmZ ed
ƒZer€ddlmZmZ G dd„ deƒZdS )z)
Tests for L{twisted.conch.manhole_tap}.
é    )ÚStreamServerEndpointService)ÚMultiService)Útelnet)Úerror)ÚUsernamePassword)Úusage)ÚrequireModule)ÚTestCaseÚcryptography)Úmanhole_sshÚmanhole_tapc                   @   sb   e Zd ZdZesdZdZddœdd„Zddœdd	„Zddœd
d„Z	ddœdd„Z
ddœdd„ZdS )ÚMakeServiceTestsz/
    Tests for L{manhole_tap.makeService}.
    zcan't run without cryptography)s   iamusers   thisispasswordN)Úreturnc              	   C   sB   |   ¡ | _t| jdƒ�}| d | j¡¡ W 5 Q R X t ¡ | _dS )z8
        Create a passwd-like file with a user.
        Úwbó   :N)	ÚmktempÚfilenameÚopenÚwriteÚjoinÚusernamePasswordr   ÚOptionsÚoptions)ÚselfÚf© r   úG/tmp/pip-unpacked-wheel-mnhg7r0q/twisted/conch/test/test_manhole_tap.pyÚsetUp!   s    
zMakeServiceTests.setUpc              	   C   s>   |   tj¡�}t ¡  g ¡ W 5 Q R X |  |jjd d¡ dS )zk
        L{manhole_tap.makeService} requires either 'telnetPort' or 'sshPort' to
        be given.
        r   z<At least one of --telnetPort and --sshPort must be specifiedN)	ÚassertRaisesr   Z
UsageErrorr   r   ÚparseOptionsÚassertEqualÚ	exceptionÚargs)r   Úer   r   r   Útest_requiresPort*   s    
þz"MakeServiceTests.test_requiresPortc                 C   s~   | j  ddg¡ t | j ¡}|  |t¡ |  t|jƒd¡ |  |jd t	¡ |  |jd j
jtj¡ |  |jd jjd¡ dS )z—
        L{manhole_tap.makeService} will make a telnet service on the port
        defined by C{--telnetPort}. It will not make a SSH service.
        ú--telnetPortztcp:222é   r   éÞ   N)r   r   r   ÚmakeServiceÚassertIsInstancer   r    ÚlenÚservicesr   ÚfactoryÚprotocolZmakeTelnetProtocolÚendpointÚ_port©r   Úservicer   r   r   Útest_telnetPort7   s     ÿz MakeServiceTests.test_telnetPortc                 C   sˆ   | j  d|  ¡ ddddg¡ t | j ¡}|  |t¡ |  t|j	ƒd¡ |  |j	d t
¡ |  |j	d jtj¡ |  |j	d jjd¡ d	S )
z”
        L{manhole_tap.makeService} will make a SSH service on the port
        defined by C{--sshPort}. It will not make a telnet service.
        z--sshKeyDirz--sshKeySizeZ1024z	--sshPortztcp:223r&   r   éß   N)r   r   r   r   r(   r)   r   r    r*   r+   r   r,   r   ZConchFactoryr.   r/   r0   r   r   r   Útest_sshPortF   s    úÿ
zMakeServiceTests.test_sshPortc              	   C   s–   | j  ddd| jg¡ t | j ¡}|jd jjj}|  	t
|j ¡ ƒd¡ |  |  | t| jŽ dtj¡¡¡ |  |  | tddƒdtj¡¡jtj¡ dS )	zS
        The C{--passwd} command-line option will load a passwd-like file.
        r%   ztcp:22z--passwdr   é   Ns   wrongs   user)r   r   r   r   r(   r+   r,   r-   Úportalr    r*   ZcheckersÚkeysÚ
assertTrueZsuccessResultOfÚloginr   r   r   ZITelnetProtocolr)   ZfailureResultOfÚvaluer   ZUnauthorizedLogin)r   r1   r6   r   r   r   Útest_passwd_   s.    ýÿÿ	  ÿÿúzMakeServiceTests.test_passwd)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   Úskipr   r   r$   r2   r4   r;   r   r   r   r   r      s   	r   N)r?   Ztwisted.application.internetr   Ztwisted.application.servicer   Ztwisted.conchr   Ztwisted.credr   Ztwisted.cred.credentialsr   Ztwisted.pythonr   Ztwisted.python.reflectr   Ztwisted.trial.unittestr	   r
   r   r   r   r   r   r   r   Ú<module>   s   