a
    W×aj  ã                   @   sj   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Zddd„ZG d	d
„ d
ejjƒZdS )é    N)Úsystem_session)ÚSamDB)ÚStringIO)Úcmd_sambatooléd   c                 C   s0   t | ƒ|d k r| S | d |… dt | ƒ|   S )Né   z[%d more characters])Úlen)ÚsÚcutoff© r   ú=/usr/lib/python3/dist-packages/samba/tests/samba_tool/base.pyÚtruncate_string!   s    r   c                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zddd„Zddd„Z	ddd„Z
dd„ Zddd„ZdS )ÚSambaToolCmdTestc                 G   sÊ   t jd jd }| d¡\}}| t|ƒ¡\}}|dd… }t|jƒ}|jD ]"}|jD ]}	|	j	durV||	j	= qVqL| 
|¡ | dd¡}
| dd¡}| dd¡}| ¡ }|j|dd	}t|
tƒ ||d
}|S )zFa convenience function to get a samdb instance so that we can query itÚuserZ	setexpiryé   NÚHÚ	sambaoptsÚcredoptsT)Zfallback_machine)ZurlZsession_infoZcredentialsÚlp)r   ÚsubcommandsZ_create_parserÚ
parse_argsÚlistÚdictÚ__dict__Zoption_groupsZoption_listÚdestÚupdateÚgetZget_loadparmZget_credentialsr   r   )ÚselfÚargvÚcmdÚparserZoptiongroupsZoptsÚargsÚkwargsZoption_groupZoptionr   r   r   r   ZcredsZsamdbr   r   r   ÚgetSamDB)   s&    




ÿzSambaToolCmdTest.getSamDBc                 G   sF   t j| }tƒ |_tƒ |_|jd| g|¢R Ž }||j ¡ |j ¡ fS )zrun a single level commandúsamba-tool %s©r   r   r   ZoutfZerrfZ_runÚgetvalue)r   Únamer!   r   Úresultr   r   r   ÚruncmdG   s
    
zSambaToolCmdTest.runcmdc                 G   sP   t j| j| }tƒ |_tƒ |_|jd||f g|¢R Ž }||j ¡ |j ¡ fS )zrun a command with sub commandszsamba-tool %s %sr%   )r   r'   Úsubr!   r   r(   r   r   r   Ú	runsubcmdO   s
    zSambaToolCmdTest.runsubcmdc                 G   sj   t j| }d| }|D ]}|j| }|d| 7 }qtƒ |_tƒ |_|j|g|¢R Ž }||j ¡ |j ¡ fS )z3run a command with any number of sub command levelsr$   z %sr%   )r   r'   Z	sublevelsr!   r   Zcmd_strr*   r(   r   r   r   ÚrunsublevelcmdZ   s    

zSambaToolCmdTest.runsublevelcmdÚ c                 C   s   | j |d||||f d d S )Nz"exit[%s] stdout[%s] stderr[%s]: %s)Úmsg)ZassertIsNone)r   ÚexitÚoutÚerrr.   r   r   r   ÚassertCmdSuccessk   s    ÿz!SambaToolCmdTest.assertCmdSuccessc                 C   s   |   ||¡ d S ©N)ZassertIsNotNone)r   Úvalr.   r   r   r   ÚassertCmdFailo   s    zSambaToolCmdTest.assertCmdFailNc                 C   s.   |d u rdt |ƒt |ƒf }|  |||¡ d S )Nz%r is not in %r)r   ZassertIn)r   ÚbaseÚstringr.   r   r   r   ÚassertMatchr   s
    ÿzSambaToolCmdTest.assertMatché   c                 C   s0   t  tj¡}|d dd„ t|d ƒD ƒ¡7 }|S )zPCreate a random name, cap letters and numbers, and always starting with a letterr-   c                 s   s&   | ]}t  tjtj tj ¡V  qd S r3   )ÚrandomÚchoicer7   Úascii_uppercaseZascii_lowercaseZdigits)Ú.0Úxr   r   r   Ú	<genexpr>|   ó    z.SambaToolCmdTest.randomName.<locals>.<genexpr>r   )r:   r;   r7   r<   ÚjoinÚrange)r   Úcountr'   r   r   r   Ú
randomNamey   s     zSambaToolCmdTest.randomNamec                 C   s   t  dd¡}|S )NiXâG i:I )r:   Zrandint)r   Zxidr   r   r   Ú	randomXid   s    zSambaToolCmdTest.randomXidc                 C   s$   |   || |ko|| |k |¡ dS )zFAssert that val1 is within delta of val2, useful for time computationsN)Z
assertTrue)r   Zval1Zval2Zdeltar.   r   r   r   ÚassertWithin…   s    zSambaToolCmdTest.assertWithin)r-   )r-   )N)r9   )r-   )Ú__name__Ú
__module__Ú__qualname__r#   r)   r+   r,   r2   r5   r8   rD   rE   rF   r   r   r   r   r   '   s   



r   )r   )r:   r7   Z
samba.authr   Zsamba.samdbr   Zsamba.compatr   Zsamba.netcmd.mainr   Zsamba.testsZsambar   ZtestsZBlackboxTestCaser   r   r   r   r   Ú<module>   s   
