
    bmI                         d Z ddlZddlZddlZddlZddlmc mZ ddl	Z	ddl
ZddlZ G d dej        j                  Zd Zd Zd Zd Zd	 ZddZ G d de          ZdS )z$Tests for presence of documentation.    Nc                       e Zd Zd ZdS )TestCasec                     t          |          }t          t          t          |                    }|                                 |dd                    |          z  z   S )Nz

    %sz
    )listmapstrsortjoin)self
parametersmessages      2/usr/lib/python3/dist-packages/samba/tests/docs.py_format_messagezTestCase._format_message"   sR    *%%
#c:..//
z)B)BCCC    N)__name__
__module____qualname__r    r   r   r   r       s(        D D D D Dr   r   c                  p    t          j                    } | dk     rdS t          | dz            }|dk     rdS |S )N   )multiprocessing	cpu_countint)r   max_workerss     r   get_max_worker_countr   (   sE    )++I 1}}qi!m$$KQqr   c                 P   t          j        | t           j        t           j        |                                          }|d                                                                                                         }||                                k    r|dk    r|dk    s|||fS d S )Nstdoutstderrcwdr    z"")
subprocessPopenPIPEcommunicatedecodeupperstrip)cmdlinetopdirparamdefault_parampresults         r   check_or_set_smbconf_defaultr/   5   s     * *#	% 	% 	% &1[]]  qT[[]]  ""((**F$$&&&&"$!6!65-//4r   c                 X   t          j        | t           j        t           j        |                                          }|d                                                                                                         }||                                k    rE|dk    r?d                    |                                          |                                k    rd S |dk    rJ	 t          |d          t          |d                                         d          k    rd S n#  Y nxY w|||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.   s          r   set_smbconf_arbitraryr7   A   s    * *#	% 	% 	% &1[]]  qT[[]]  ""((**F##%%%%yy((L,>,>,@,@@@t Y	<##s1Q4::<<';';;;t <	Dul**4s   !:D D"c                 V   t          j        d|d          }	 |dz   }	|	|dz   |z   z  }	|                    |	           |                                 n# |                                 w xY wt	          j        | d|j        gz   t          j        t          j        |                                          }
t          j
        |j                   |                                |                                k    r1|
d                                                                         D ]}|                                                    |          s d S |                    d	          d
                                                                         }||                                k    r|dk    r@d                    |                                          |                                k    r d S |dk    r3	 t'          |d          t'          |d          k    rn#  Y nxY w|||fc S d S )NwF)modedirdelete
 = z-sr   r   =   r   r1   r2   r3   )tempfileNamedTemporaryFilewritecloser"   r#   namer$   r%   osunlinklowerr&   
splitlinesr(   
startswithr4   r'   r
   r   )r)   r*   tempdirsectionr+   r5   opposite_valuer6   gtowriter-   linevalue_founds                r   set_smbconf_arbitrary_oppositerR   Y   s   #'%HHHAD.55=>11										D!&>1 * *#	% 	% 	% &1[]]  Iaf 	 4 4 6 666aDKKMM,,.. 	< 	<D::<<**511 tt**S//!,2244::<<Kl002222''yy!2!2!4!4559K9K9M9MMM#tt **|Q//3{A3F3FFF$ G ,;;;;4s   %A A)5"HHc              #     K   t           j                            | dddd          }t           j                            t           j                            |d                    st	          d          	 t          t           j                            |d          d          }n!# t          $ r}t	          d          d }~ww xY w|                                }t          j	        |          }|D ]d}|j
                            d	          }|j
                            d
          dk    r;|V  |                    d          }||D ]}	|	j        V  e|                                 d S )Nbindefaultdocs-xml
smbdotconfparameters.all.xml!Unable to find parameters.all.xmlrError opening parameters filerE   removed1synonym)rF   pathr
   exists	ExceptionopenIOErrorreadET
fromstringattribgetfindalltextrD   )
	sourcedirr_   r-   eoutroot	parameterrE   synsys
             r   get_documented_parametersrr      s[     7<<	5)ZNND7>>"',,t-ABBCC =;<<<9d$8993?? 9 9 978889
&&((C=D  	##F++	**c11


	**?  gGGIIIII   3.B" "
C ,B;;C Tc              #   6  K   t           j                            | dddd          }t           j                            t           j                            |d                    st	          d          	 t          t           j                            |d          d          }n!# t          $ r}t	          d          d }~ww xY w|                                }t          j	        |          }|D ]}|j
                            d	          }|j
                            d
          }	|j
                            d          dk    rV|                    d          }
g }|
D ]5}|j
                            d
          dk    r|                    |           6d }t          |          dk    r|rn2t          |          dk    rt	          d|z            |d         j        }|d}|j
                            d          }||||	fV  |                                 d S )NrT   rU   rV   rW   rX   rY   rZ   r[   rE   typer\   r]   valuer   r@   z,More than one default found for parameter %sr!   context)rF   r_   r
   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   appendlenrj   rD   )rk   omit_no_defaultr_   r-   rl   rm   rn   ro   rE   r5   valuesdefaultsrv   default_textrw   s                  r   get_documented_tuplesr~      s     7<<	5)ZNND7>>"',,t-ABBCC =;<<<9d$8993?? 9 9 978889
&&((C=D 6 6	##F++%))&11
	**c11""7++ 	' 	'E|''944&&&x==A ]]QJTQRRR#A;+LL"&&y11L':55555GGIIIIIrs   c                   h     e Zd Z eg d          Z fdZ fdZd Zd Zd Z	d Z
dd	Zd
 Z xZS )SmbDotConfTests)	log levelr_   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                 f   t          t          |                                            t          j                            | j        d          | _        t          | j        d          }	 |	                    d           |
                                 n# |
                                 w xY wt          j                            | j        d          | _        t          | j        d          }	 |	                    d           |
                                 n# |
                                 w xY wt          j                            t          j                              | _        	 t!          t#          | j                            | _        n#  |                     d           Y nxY w	 t!          t)          | j                            | _        n#  |                     d           Y nxY w	 t!          t)          | j        d                    | _        d S #  |                     d           Y d S xY w)	Nzparamtestsmb.confr9   z
[test]
   path = /
zemptytestsmb.confr!   z$Unable to load documented parameterszUnable to load parametersF)superr   setUprF   r_   r
   rK   smbconfrb   rC   rD   	blankconfabspathsambasource_tree_topdirr*   setrr   
documentedfailr~   r|   defaults_all)r   f	__class__s     r   r   zSmbDotConfTests.setUp   s   ot$$**,,,w||DL2EFFs##	GG    
 GGIIIIAGGIIIIdl4GHH%%	GGBKKKGGIIIIAGGIIIIgooe&>&@&@AA	>!";DK"H"HIIDOO	>II<=====	3 5dk B BCCDMM	3II122222	3 #$9$+u$M$M N ND	3II1222222s<   )B B),D D,%&F F%)&G G)-'H H0c                     t          t          |                                            t          j        | j                   t          j        | j                   d S N)r   r   tearDownrF   rG   r   r   )r   r   s    r   r   zSmbDotConfTests.tearDown  sI    ot$$--///
	$,
	$.!!!!!r   c                     |                      dg           |                     dg           |                     dgg d           |                     dg           d S )Nbin/testparm)zclient lanman authzclient plaintext authzregistry shares	smb portsrpc server dynamic port rangename resolve order
clustering
exceptions_test_default_set_defaults_set_arbitrary_test_emptyr   s    r   test_default_s3zSmbDotConfTests.test_default_s3  s    N+,,,N+,,, 	^,( ( ( 	 	) 	) 	) 	.)*****r   c                     |                      ddg           |                     ddg           |                     ddgg d           |                     ddg           d S )Nbin/samba-tooltestparm)r   r   r   r   r   r   s    r   test_default_s4zSmbDotConfTests.test_default_s4  s    ,j9:::,j9:::-z:(> (> (> 	 	? 	? 	? 	*J788888r   c           	         |d         dk    r+t          j        dd           rt           j        d         g|z   }t                      }t          j                            t                                5 }g }| j        D ]}|\  }}}}	|| j	        v rd|v rd }
|dk    rd}
n!|dk    rd	}
n| 
                    d
|z             d| j        z  g}|d         dk    r	d| j        g}||z   d|
d|gz   }|                    t          || j        ||          }|                    |           t          j                            |          D ]O}|                                r9|                                \  }}}|d|}|                    |d|           P	 d d d            n# 1 swxY w Y   t'          |          dk    r+| 
                    |                     |d                     d S d S )Nr   r   PYTHONr   :GglobalStest%s has no valid context--configfile=%sr   --suppress-prompt--section-name--parameter-name
      Expected: 
      Got: .Parameters that do not have matching defaults:)rF   getenvenvironr   
concurrentfuturesProcessPoolExecutorr   r|   special_casesr   r   submitr/   r*   rx   as_completedr.   addry   r   )r   programfailsetexecutorresult_futurestuplesr+   rU   rw   r5   rL   program_arg1r)   futurer   r.   r,   
doc_triples                     r   r   zSmbDotConfTests._test_default   s   1:)))bi$.G.G)z(+,w6G%%33@T@V@V3WW %	L[cN- . .6<3wD...%<<c>>&GG^^$GGII7%?@@@ 1T\ BCAJ.00$7#FL!L0%5%,%7%*	4, , ")EwPTP[]bdkll%%f----'44^DD L L88:: L3488::0FE==BUUMM!RJKKzzz66 JKKKLA%	L %	L %	L %	L %	L %	L %	L %	L %	L %	L %	L %	L %	L %	L %	LN w<<!IId**7+[] ] ^ ^ ^ ^ ^ s   2D"F!!F%(F%c                    |d         dk    r+t          j        dd           rt           j        d         g|z   }t                      }t          j                            t                                5 }g }| j        D ]}|\  }}}}	t          ddg          }
||
v rd }|dk    rd}n!|d	k    rd
}n| 	                    d|z             d| j
        z  g}|d         dk    r	d| j
        g}||z   d|d|d|d|gz   }|                    t          || j        ||          }|                    |           t          j                            |          D ]O}|                                r9|                                \  }}}|d|}|                    |d|           P	 d d d            n# 1 swxY w Y   t%          |          dk    r+| 	                    |                     |d                     d S d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   --optionr>   r   r   r   )rF   r   r   r   r   r   r   r   r|   r   r   r   r/   r*   rx   r   r.   r   ry   r   )r   r   r   r   r   r   r+   rU   rw   r5   r   rL   r   r)   r   r   r.   r,   r   s                      r   r   zSmbDotConfTests._set_defaultsR  s   1:)))bi$.G.G)z(+,w6G%%33@T@V@V3WW )	L[cN- . .6<3w ,"  

 J&&c>>&GG^^$GGII7%?@@@ 1T\ BCAJ.00$7#FL!L0%5%,%7%*%/27%%%A4C C ")EwPTP[]bdkll%%f----'44^DD L L88:: L3488::0FE==BUUGG!LJKKzzz66 JKKKLI)	L )	L )	L )	L )	L )	L )	L )	L )	L )	L )	L )	L )	L )	L )	LV w<<!IId**7+[] ] ^ ^ ^ ^ ^ s   2D0F//F36F3Nc                 2   |d         dk    r+t          j        dd           rt           j        d         g|z   }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                            t                                5 }g }g }| j        D ]E}	|	\  }
}}}|
dv r|dv r||
|v rd }|dk    rd}n!|dk    rd}n| 	                    d|
z             |
                    |          }|| 	                    d |
z             d!| j        z  g}|d         d"k    r	d#| j        g}||z   d$|d%|
d&|
d'|gz   }|                    t          || j        |
||          }|                    |           |
                    |          }|d#d&|
d'|gz   }|                    t           || j        | j        ||
|||	  	        }|                    |           Gt          j                            |          D ]O}|                                r9|                                \  }}
}|
d(|}|                    |d)|           Pt          j                            |          D ]O}|                                r9|                                \  }
}}|
d(|}|                    |d)|           P	 d d d            n# 1 swxY w Y   t+          |          dk    r+| 	                    |                     |d*                     d S d S )+Nr   r   r   stringyes5za b c100123ustringr!   aza, b, c)r   booleanr2   zboolean-revcmdlistbytesoctalr   enumboolean-autocharr   string2no6zd e f110567ustring2bzd, e, fr   )r   copyincluder   )r   r   r   r   r   r   r   z%s has an invalid typer   r   r   r   r   r   r>   r   r   z*Parameters that were unexpectedly not set:)rF   r   r   r   r   r   r   r   r   r   rh   r   r   r7   r*   rx   rR   rK   r   r.   r   ry   r   )r   r   r   	arbitraryopposite_arbitraryr   r   result_futures1result_futures2r   r+   rU   rw   r5   rL   r6   r   r)   r   rM   r   r.   r   rQ   s                           r   r   zSmbDotConfTests._set_arbitrary  s`   1:)))bi$.G.G)z(+,w6G'Ec$) '"$ )S)U U	 )2ds-1)0'+'-)3&("cS\^ ^ %%33@T@V@V3WW C	Q[c O O+ 1/ 1/6<3wHHH !999)
** c>>&GG^^$GGII7%?@@@(}}Z88'II6>??? 1T\ BCAJ.00$7#FL!L0%5%,%7%*%/27%%%F4H H ")>V[]giuvv&&v...!3!7!7
!C!C!%8%/27%%%F%H H ")GRVR]_c_k)0%^Uac c&&v....'44_EE L L88:: L23((**/FE<=BUULL!QJKKzzz66 JKKK'44_EE Q Q88:: Q78xxzz4E<=BUULL!QJKKzzz;; OPPPQ}C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	Q C	QJ w<<!IId**7+WY Y Z Z Z Z Z s   H1KKKc                 R   |d         dk    r+t          j        dd           rt           j        d         g|z   }d| j        z  dg}|d         dk    r	d| j        g}t	          ||z              t          j        ||z   t
          j        t
          j        | j                  	                                }d}|d         
                                                                D ]~}|                                                    d	          r*|                                                    d
          rR||                                                                dz   z  }|                                dk    r/|                                dk    r|                     d           d S d S d S )Nr   r   r   r   r   r   r   r!   #zidmap config *r=   z[global]z	[globals]z9Testparm returned unexpected output on an empty smb.conf.)rF   r   r   r   printr"   r#   r$   r*   r%   r&   rI   r(   rJ   rH   r   )r   r   r   r-   outputrP   s         r   r   zSmbDotConfTests._test_empty  s   1:)))bi$.G.G)z(+,w6G)T^<>QRAJ.((/@Lg$%%%W|3$.O$.O!%. . . /:kmm 	
 aDKKMM,,.. 	2 	2Dzz||&&s++ zz||&&'788 djjll((**T11FF<<>>Z''FLLNNk,I,IIIQRRRRR (',I,Ir   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r      s         C     M2#3 #3 #3 #3 #3J" " " " "
+ + +9 9 90^ 0^ 0^d4^ 4^ 4^l]Z ]Z ]Z ]Z~S S S S S S Sr   r   )T)__doc__r   samba.testsrF   r"   xml.etree.ElementTreeetreeElementTreere   r   concurrent.futuresr   rA   testsTestCaseInTempDirr   r   r/   r7   rR   rr   r~   r   r   r   r   <module>r      sS  ( + *      				     " " " " " " " " "         D D D D Du{, D D D  
 
 
  0' ' 'R  .# # # #L@S @S @S @S @Sh @S @S @S @S @Sr   