o
    ¯bÿ  ã                   @   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dƒZerFerFd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Úpyasn1)Úmanhole_sshÚmanhole_tapc                   @   sL   e Zd ZdZes
dZesdZdZdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ ZdS )ÚMakeServiceTestsz/
    Tests for L{manhole_tap.makeService}.
    zcan't run without cryptographyzCannot run without PyASN1)s   iamusers   thisispasswordc                 C   sV   |   ¡ | _t| jdƒ�}| d | j¡¡ W d  ƒ n1 sw   Y  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   úE/usr/lib/python3/dist-packages/twisted/conch/test/test_manhole_tap.pyÚsetUp%   s
   
ÿzMakeServiceTests.setUpc                 C   sR   |   tj¡�}t ¡  g ¡ W d  ƒ n1 sw   Y  |  |jjd d¡ dS )zk
        L{manhole_tap.makeService} requires either 'telnetPort' or 'sshPort' to
        be given.
        Nr   z<At least one of --telnetPort and --sshPort must be specified)	ÚassertRaisesr   Ú
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ÚprotocolÚmakeTelnetProtocolÚendpointÚ_port©r   Úservicer   r   r   Útest_telnetPort;   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--sshKeySizeÚ512z	--sshPortztcp:223r'   r   éß   N)r   r    r   r   r)   r*   r   r!   r+   r,   r   r-   r   ÚConchFactoryr0   r1   r2   r   r   r   Útest_sshPortJ   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+   ÚcheckersÚkeysÚ
assertTrueÚsuccessResultOfÚloginr   r   r   ÚITelnetProtocolr*   ÚfailureResultOfÚvaluer   ÚUnauthorizedLogin)r   r3   r:   r   r   r   Útest_passwdc   s,   ýÿÿ	ÿÿúzMakeServiceTests.test_passwdN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   Úskipr   r   r   r%   r4   r8   rD   r   r   r   r   r      s    	r   N)rH   Útwisted.application.internetr   Útwisted.application.servicer   Útwisted.conchr   Útwisted.credr   Útwisted.cred.credentialsr   Útwisted.pythonr   Útwisted.python.reflectr   Útwisted.trial.unittestr	   r
   r   r   r   r   r   r   r   r   Ú<module>   s   