a
    ¡ÖaÌF  ã                   @   s¨   d Z ddlZddlZddlZddlZddlm  mZ ddl	Z	ddl
ZddlZG dd„ dejjƒZdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zddd„ZG dd„ deƒZdS )z$Tests for presence of documentation.é    Nc                   @   s   e Zd Zdd„ ZdS )ÚTestCasec                 C   s0   t |ƒ}t tt|ƒƒ}| ¡  |dd |¡  S )Nz

    %sz
    )ÚlistÚmapÚstrÚsortÚjoin)ÚselfÚ
parametersÚmessage© r   ú2/usr/lib/python3/dist-packages/samba/tests/docs.pyÚ_format_message"   s    zTestCase._format_messageN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r       s   r   c                  C   s0   t  ¡ } | dk rdS t| d ƒ}|dk r,dS |S )Né   )ÚmultiprocessingÚ	cpu_countÚint)r   Úmax_workersr   r   r   Úget_max_worker_count(   s    r   c                 C   sX   t j| t jt j|d ¡ }|d  ¡  ¡  ¡ }|| ¡ krT|dkrJ|dksT|||fS d S )N©ÚstdoutÚstderrÚcwdr   Ú z"")Ú
subprocessÚPopenÚPIPEÚcommunicateÚdecodeÚupperÚstrip)ÚcmdlineÚtopdirÚparamÚdefault_paramÚpÚresultr   r   r   Úcheck_or_set_smbconf_default5   s    ý

r)   c                 C   s¦   t j| t jt j|d ¡ }|d  ¡  ¡  ¡ }|| ¡ kr\|dkr\d | ¡ ¡| ¡ kr\d S |dkr¢z&t	|dƒt	|d  ¡ dƒkrˆW d S W n   Y n0 |||fS d S )Nr   r   r   ú, Úintegeré   )
r   r   r   r   r    r!   r"   r   Úsplitr   )r#   r$   r%   Ú
param_typeÚvalue_to_user'   r(   r   r   r   Úset_smbconf_arbitaryA   s$    ý


r0   c                 C   sB  t jd|dd}z.|d }||d | 7 }| |¡ W | ¡  n
| ¡  0 tj| d|jg tjtj|d ¡ }	t	 
|j¡ | ¡ | ¡ kr>|	d  ¡  ¡ D ] }
|
 ¡  |¡s´ d S |
 d	¡d
  ¡  ¡ }|| ¡ krœtdkrúd | ¡ ¡| ¡ krú d S tdkrœzt|dƒt|dƒkrW qœW n   Y n0 |||f  S qœd S )NÚwF)ÚmodeÚdirÚdeleteÚ
z = ú-sr   r   ú=é   r   r*   r+   r,   )ÚtempfileZNamedTemporaryFileÚwriteÚcloser   r   Únamer   r   ÚosÚunlinkÚlowerr    Ú
splitlinesr"   Ú
startswithr-   r!   r.   r   r   )r#   r$   ÚtempdirÚsectionr%   Úopposite_valuer/   ÚgZtowriter'   ÚlineÚvalue_foundr   r   r   Úset_smbconf_arbitary_oppositeY   s:    ý
rH   c           
   
   c   sè   t j | dddd¡}t j t j |d¡¡s2tdƒ‚ztt j |d¡dƒ}W n, tyv } ztdƒ‚W Y d }~n
d }~0 0 | ¡ }t 	|¡}|D ]L}|j
 d	¡}|j
 d
¡dkr°qŽ|V  | d¡}|d urŽ|D ]}	|	jV  qÌqŽ| ¡  d S )NÚbinÚdefaultúdocs-xmlÚ
smbdotconfúparameters.all.xmlú!Unable to find parameters.all.xmlÚrúError opening parameters filer<   ÚremovedÚ1Zsynonym)r=   Úpathr   ÚexistsÚ	ExceptionÚopenÚIOErrorÚreadÚETÚ
fromstringÚattribÚgetÚfindallÚtextr;   )
Ú	sourcedirrS   r'   ÚeÚoutÚrootÚ	parameterr<   ZsynZsyr   r   r   Úget_documented_parameters   s&    

rd   Tc              
   c   sf  t j | dddd¡}t j t j |d¡¡s2tdƒ‚ztt j |d¡dƒ}W n, tyv } ztdƒ‚W Y d }~n
d }~0 0 | ¡ }t 	|¡}|D ]Ê}|j
 d	¡}|j
 d
¡}	|j
 d¡dkr¼qŽ| d¡}
g }|
D ]}|j
 d
¡dkrÎ| |¡ qÎd }t|ƒdkr
|r0qŽn&t|ƒdkr&td| ƒ‚n
|d j}|d u r>d}|j
 d¡}||||	fV  qŽ| ¡  d S )NrI   rJ   rK   rL   rM   rN   rO   rP   r<   ÚtyperQ   rR   Úvaluer   r8   z,More than one default found for parameter %sr   Úcontext)r=   rS   r   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   ÚappendÚlenr^   r;   )r_   Zomit_no_defaultrS   r'   r`   ra   rb   rc   r<   r.   ÚvaluesÚdefaultsrf   Zdefault_textrg   r   r   r   Úget_documented_tuples˜   s>    



rl   c                       sf   e Zd Zeg d¢ƒZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
ddd„Zdd„ Z‡  ZS )ÚSmbDotConfTests)ú	log levelrS   zpanic actionzhomedir mapzNIS homedirzserver stringznetbios namezsocket optionszctdbd socketÚprintingzprintcap namezqueueresume commandzqueuepause commandzlpresume commandzlppause commandzlprm commandzlpq commandzprint commandztemplate homedirzmax open fileszinclude system krb5 confúsmbd max async dosmodec                    s*  t t| ƒ ¡  tj | jd¡| _t| jdƒ}z| 	d¡ W | 
¡  n
| 
¡  0 tj | jd¡| _t| jdƒ}z| 	d¡ W | 
¡  n
| 
¡  0 tj t ¡ ¡| _ztt| jƒƒ| _W n   |  d¡ Y n0 ztt| jƒƒ| _W n   |  d¡ Y n0 ztt| jdƒƒ| _W n   |  d¡ Y n0 d S )	Nzparamtestsmb.confr1   z
[test]
   path = /
zemptytestsmb.confr   z$Unable to load documented parameterszUnable to load parametersF)Úsuperrm   ÚsetUpr=   rS   r   rB   ÚsmbconfrV   r:   r;   Ú	blankconfÚabspathÚsambaZsource_tree_topdirr$   Úsetrd   Z
documentedÚfailrl   rk   Údefaults_all)r   Úf©Ú	__class__r   r   rr   Ý   s0    zSmbDotConfTests.setUpc                    s*   t t| ƒ ¡  t | j¡ t | j¡ d S )N)rq   rm   ÚtearDownr=   r>   rs   rt   ©r   r{   r   r   r}     s    zSmbDotConfTests.tearDownc                 C   s<   |   dg¡ |  dg¡ | jdgg d¢d |  dg¡ d S )Nzbin/testparm)zclient lanman authzclient plaintext authzregistry sharesú	smb portsúrpc server dynamic port rangeúname resolve orderZ
clustering©Ú
exceptions©Ú_test_defaultÚ_set_defaultsÚ_set_arbitraryÚ_test_emptyr~   r   r   r   Útest_default_s3  s    ÿzSmbDotConfTests.test_default_s3c                 C   sD   |   ddg¡ |  ddg¡ | jddgg d¢d |  ddg¡ d S )Núbin/samba-toolZtestparm)r   r€   r   r‚   r„   r~   r   r   r   Útest_default_s4  s    
ÿzSmbDotConfTests.test_default_s4c              	   C   s^  |d dkr(t  dd ¡r(t jd g| }tƒ }tjjtƒ dê}g }| jD ]ˆ}|\}}}}	|| j	v rfqJd|v rpqJd }
|dkr‚d}
n|dkrd	}
n|  
d
| ¡ |d| jd|
d|g }| t|| j||¡}| |¡ qJtj |¡D ]8}| ¡ rà| ¡ \}}}d||f }| d||f ¡ qàW d   ƒ n1 s00    Y  t|ƒdkrZ|  
|  |d¡¡ d S )Nr   rŠ   ÚPYTHON©r   ú:ÚGÚglobalÚSÚtestú%s has no valid contextr6   ú--section-nameú--parameter-nameú%s
      Expected: %sú%s
      Got: %sú.Parameters that do not have matching defaults:)r=   ÚgetenvÚenvironrw   Ú
concurrentÚfuturesÚProcessPoolExecutorr   rk   Úspecial_casesrx   rs   Úsubmitr)   r$   rh   Úas_completedr(   Úaddri   r   )r   ÚprogramÚfailsetÚexecutorÚresult_futuresÚtuplesr%   rJ   rg   r.   rC   r#   Úfuturerz   r(   r&   Ú
doc_tripler   r   r   r…     sF    

û4
ÿzSmbDotConfTests._test_defaultc                 C   sj  |d dkr(t  dd ¡r(t jd g| }tƒ }tjjtƒ dö}g }| jD ]”}|\}}}}	tddgƒ}
||
v rpqJd }|dkr‚d}n|d	krd
}n|  	d| ¡ |d| j
d|d|dd||f g }| t|| j||¡}| |¡ qJtj |¡D ]8}| ¡ rì| ¡ \}}}d||f }| d||f ¡ qìW d   ƒ n1 s<0    Y  t|ƒdkrf|  	|  |d¡¡ d S )Nr   rŠ   rŒ   r   ro   rp   r   r   r‘   r’   r“   r6   r”   r•   ú--optionú%s = %sr–   r—   r˜   )r=   r™   rš   rw   r›   rœ   r   r   rk   rx   rs   rŸ   r)   r$   rh   r    r(   r¡   ri   r   )r   r¢   r£   r¤   r¥   r¦   r%   rJ   rg   r.   rƒ   rC   r#   r§   rz   r(   r&   r¨   r   r   r   r†   N  sN    
þ
ù4
ÿzSmbDotConfTests._set_defaultsNc                 C   sv  |d dkr(t  dd ¡r(t jd g| }ddddddd	d
dddddœ}dddddddddddddœ}tƒ }tjjtƒ dÄ}g }g }| jD ]}	|	\}
}}}|
dv r¨qŒ|dv r²qŒ|d urÄ|
|v rÄqŒd }|dkrÖd}n|dkräd}n|  	d|
 ¡ | 
|¡}|d u r|  	d |
 ¡ |d!| jd"|d#|
d$d%|
|f g }| t|| j|
||¡}| |¡ | 
|¡}|d&d$d%|
|f g }| t|| j| j||
||¡}| |¡ qŒtj |¡D ]<}| ¡ rª| ¡ \}}
}d'|
|f }| d(||f ¡ qªtj |¡D ]<}| ¡ rô| ¡ \}
}}d'|
|f }| d(||f ¡ qôW d   ƒ n1 sH0    Y  t|ƒdkrr|  	|  |d)¡¡ d S )*Nr   rŠ   rŒ   ÚstringZyesÚ5za b cZ10Z0123Úustringr   Úaza, b, c)r«   Zbooleanr+   zboolean-revZcmdlistÚbytesZoctalr­   Úenumúboolean-autoÚcharr   Zstring2ZnoÚ6zd e fZ11Z0567Zustring2Úbzd, e, fr   )ro   ÚcopyZincludern   )r°   r±   r   r   r‘   r’   r“   z%s has an invalid typer6   r”   r•   r©   rª   ú--suppress-promptr–   r—   z*Parameters that were unexpectedly not set:)r=   r™   rš   rw   r›   rœ   r   r   ry   rx   r\   rs   rŸ   r0   r$   rh   rH   rB   r    r(   r¡   ri   r   )r   r¢   rƒ   Z	arbitraryZopposite_arbitraryr£   r¤   Zresult_futures1Zresult_futures2r¦   r%   rJ   rg   r.   rC   r/   r#   r§   rD   rz   r(   r¨   rG   r   r   r   r‡     s    úú


ù	


þ

6
ÿzSmbDotConfTests._set_arbitraryc                 C   sÄ   |d dkr(t  dd ¡r(t jd g| }tj|d| jdg tjtj| jd ¡ }d}|d  	¡  
¡ D ]8}| ¡  d¡rxqd| ¡  d	¡rˆqd|| ¡  ¡ d
 7 }qd| ¡ dkrÀ| ¡ dkrÀ|  d¡ d S )Nr   rŠ   rŒ   r6   r¶   r   r   ú#zidmap config *r5   z[global]z	[globals]z9Testparm returned unexpected output on an empty smb.conf.)r=   r™   rš   r   r   rt   r   r$   r   r    r@   r"   rA   r?   rx   )r   r¢   r'   ÚoutputrF   r   r   r   rˆ   Ü  s&    þû
zSmbDotConfTests._test_empty)N)r   r   r   rw   rž   rr   r}   r‰   r‹   r…   r†   r‡   rˆ   Ú__classcell__r   r   r{   r   rm   ¾   s   %	/3
[rm   )T)Ú__doc__rv   Zsamba.testsr=   r   Zxml.etree.ElementTreeZetreeZElementTreerY   r   Zconcurrent.futuresr›   r9   ZtestsZTestCaseInTempDirr   r   r)   r0   rH   rd   rl   rm   r   r   r   r   Ú<module>   s    (
&