U
     T‚g.  ã                   @   s  d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	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mZ edƒZedƒZedk	rÀd dlmZmZ eeƒG dd„ dƒƒZ edkrâdnedkrîdndZ!G dd„ dej"ƒZ#G dd„ dej"ƒZ$dS )é    )Úimplementer)Ú
IConchUser)ÚAllowAnonymousAccessÚ'InMemoryUsernamePasswordDatabaseDontUse)Ú	AnonymousÚ
IAnonymousÚIUsernamePasswordÚUsernamePassword)ÚLoginDenied)ÚPortal)ÚIReactorProcess)ÚUserDatabase)ÚrequireModule)Úunittesté   )Ú
StubClientÚStubConnectionÚcryptographyztwisted.conch.unixN)ÚUnixConchUserÚUnixSSHRealmc                   @   s0   e Zd ZdZdd„ Zdi dddddfdd„ZdS )	ÚMockProcessSpawnerzC
    An L{IReactorProcess} that logs calls to C{spawnProcess}.
    c                 C   s
   g | _ d S )N)Ú_spawnProcessCalls)Úself© r   ú@/tmp/pip-unpacked-wheel-1_7di8ic/twisted/conch/test/test_unix.pyÚ__init__(   s    zMockProcessSpawner.__init__r   Nr   c
           
      C   s$   | j  |||||||||	dœ	¡ dS )zQ
        Log a call to C{spawnProcess}. Do not actually spawn a process.
        )	ÚprocessProtocolÚ
executableÚargsÚenvÚpathÚuidÚgidÚusePTYÚchildFDsN)r   Úappend)
r   r   r   r   r   r    r!   r"   r#   r$   r   r   r   ÚspawnProcess+   s    ÷ÿzMockProcessSpawner.spawnProcess)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r&   r   r   r   r   r   "   s   ör   zCannot run without cryptographyzUnix system requiredc                   @   s   e Zd ZeZddœdd„ZdS )ÚTestSSHSessionForUnixConchUserN©Úreturnc           
      C   sŠ   t ƒ }d}d}|j||d� |  td|¡ tƒ }t|ƒ}ttƒ d�|_tj	||d�}d}dg}| 
||¡ |j\}	|  ||	d	 d
 ¡ dS )zn
        C{execCommand} sets the C{HOME} environment variable to the avatar's home
        directory.
        z/made/up/path/Úuser©ÚhomeÚpwd)Ú	transport)ZreactorNznot-actually-executedr   ÚHOME)r   ÚaddUserÚpatchÚunixr   r   r   r   ÚconnZSSHSessionForUnixConchUserZexecCommandr   ÚassertEqual)
r   ÚuserdbZhomeDirectoryZuserNameZmockReactorÚavatarÚsessionÚprotocolÚcommandÚcallr   r   r   ÚtestExecCommandEnvironmentU   s    z9TestSSHSessionForUnixConchUser.testExecCommandEnvironment)r'   r(   r)   Ú
shouldSkipÚskipr?   r   r   r   r   r+   R   s   r+   c                   @   s0   e Zd ZdZeZddœdd„Zddœdd„ZdS )ÚTestUnixSSHRealmz$
    Tests for L{UnixSSHRealm}.
    Nr,   c           
      C   s”   t ƒ }d}|jd|d� |  td|¡ tdd�}ttƒ |gƒ}tddƒ}| |dt	¡}|  
|¡\}}}	|  |t¡ t|tƒs€t‚|  | ¡ |¡ dS )	zt
        L{UnixSSHRealm} is an L{IRealm} whose C{.requestAvatar} method returns
        a L{UnixConchUser}.
        z/testing/home/valuer.   r/   r1   s   password)r.   s   userN)r   r4   r5   r6   r   r   r   r	   Úloginr   ZsuccessResultOfÚassertIsInstancer   Ú
isinstanceÚAssertionErrorr8   Z
getHomeDir)
r   r9   r0   ZpwdbÚpÚcredsÚresultZresultInterfacer:   Zlogoutr   r   r   Útest_unixSSHRealmq   s    

z"TestUnixSSHRealm.test_unixSSHRealmc                 C   s@   t tƒ tƒ gƒ}| ttƒ ƒdt¡}|  |¡}|  |j	t
¡ dS )z?
        L{UnixSSHRealm} will refuse anonymous logins.
        N)r   r   r   rC   r   r   r   ZfailureResultOfrD   Úvaluer
   )r   rG   rI   ZloginDeniedr   r   r   Ú"test_unixSSHRefusesAnonymousLogins‡   s    
z3TestUnixSSHRealm.test_unixSSHRefusesAnonymousLogins)r'   r(   r)   r*   r@   rA   rJ   rL   r   r   r   r   rB   j   s   rB   )%Zzope.interfacer   Ztwisted.conch.interfacesr   Ztwisted.cred.checkersr   r   Ztwisted.cred.credentialsr   r   r   r	   Ztwisted.cred.errorr
   Ztwisted.cred.portalr   Ztwisted.internet.interfacesr   Ztwisted.python.fakepwdr   Ztwisted.python.reflectr   Ztwisted.trialr   Ztest_sessionr   r   r   r6   Ztwisted.conch.unixr   r   r   r@   ZTestCaser+   rB   r   r   r   r   Ú<module>   s0   (ÿÿû	