U
    
W[                     @   s   d Z zddlZW n ek
r(   dZY nX zddlZW n ek
rN   dZY nX erherhd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d	lmZ dd
lmZ G dd deZdS )z)
Tests for L{twisted.conch.manhole_tap}.
    N)manhole_tapmanhole_ssh)StreamServerEndpointService)MultiService)error)UsernamePassword)telnet)usage)TestCasec                   @   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   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   E/usr/lib/python3/dist-packages/twisted/conch/test/test_manhole_tap.pysetUp0   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)	ZassertRaisesr	   Z
UsageErrorr   r   parseOptionsassertEqualZ	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_telnetPortF   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512z	--sshPortztcp:223r!   r      N)r   r   r   r   r#   r$   r   r   r%   r&   r   r'   r   ZConchFactoryr)   r*   r+   r   r   r   test_sshPortU   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keysZ
assertTrueZsuccessResultOfZloginr   r   r   ZITelnetProtocolr$   ZfailureResultOfvaluer   ZUnauthorizedLogin)r   r,   r1   r   r   r   test_passwdi   s*    
   zMakeServiceTests.test_passwdN)__name__
__module____qualname____doc__cryptographyskippyasn1r   r   r   r-   r/   r4   r   r   r   r   r   #   s   
r   )r8   r9   ImportErrorr;   Ztwisted.conchr   r   Ztwisted.application.internetr   Ztwisted.application.servicer   Ztwisted.credr   Ztwisted.cred.credentialsr   r   Ztwisted.pythonr	   Ztwisted.trial.unittestr
   r   r   r   r   r   <module>   s$   

