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   