a
    W×aŠ1  ã                   @   s0   d dl Z d dlZd dlmZ G dd„ deƒZdS )é    N)ÚSambaToolCmdTestc                       sˆ   e Zd ZdZg ZdZ‡ fdd„Z‡ fdd„Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zi fdd„Zdd„ Zdd„ Z‡  ZS )ÚOUCmdTestCasez#Tests for samba-tool ou subcommandsNc                    sF  t t| ƒ ¡  |  ddtjd  dtjd tjd f ¡| _g | _| j |  	ddi¡¡ | j |  	dd	i¡¡ | j |  	dd
i¡¡ | j |  	ddi¡¡ | jD ] }|  
|¡\}}}|  |||¡ |  |dd¡ | j d|d  ¡}|  d| |¡ |  |d ¡}|  |¡ |  d| d¡ |d ¡ |  d| d¡ |d ¡ q d S )Nz-Hz	ldap://%sZ	DC_SERVERz-U%s%%%sZDC_USERNAMEZDC_PASSWORDÚnameZtestou1Ztestou2Ztestou3Ztestou4Ú ú$There shouldn't be any error messageúOU=%súCreated ou "%s"ú%sÚdescription)Úsuperr   ÚsetUpZgetSamDBÚosÚenvironÚsamdbÚousÚappendÚ	_randomOUÚ
_create_ouÚassertCmdSuccessÚassertEqualÚnormalize_dn_in_domainÚassertInÚ_find_ouÚassertIsNotNoneÚget)ÚselfÚouÚresultÚoutÚerrÚ
full_ou_dnÚfound©Ú	__class__© ú;/usr/lib/python3/dist-packages/samba/tests/samba_tool/ou.pyr       s*    ÿ

ÿzOUCmdTestCase.setUpc              	      s`   t t| ƒ ¡  | jD ]F}|  |d ¡r|  ddd|d  ¡\}}}|  |||d|d  ¡ qd S )Nr   r   Údeleter   úFailed to delete ou '%s')r   r   ÚtearDownr   r   Ú	runsubcmdr   )r   r   r   r   r   r"   r$   r%   r(   ;   s    

ÿ


ÿzOUCmdTestCase.tearDownc              	   C   s\  | j D ],}|  |¡\}}}|  |d¡ |  d|¡ q| j D ]Z}|  ddd|d  ¡\}}}|  |||d|d  ¡ |  |d ¡}|  |d|d  ¡ q:| j D ]–}|  dd	d|d  d
|d  ¡\}}}|  |||¡ |  |dd¡ | j	 
d|d  ¡}|  d| |¡ |  |d ¡}|  d| d¡ d|d  ¡ qœ| j D ]l}| j	 
d|d  ¡}|  ddt|ƒ¡\}}}|  |||d|d  ¡ |  |d ¡}|  |d|d  ¡ q:| j D ]¨}| j	 
d|d  ¡}|  dd	t|ƒd
|d  ¡\}}}|  |||¡ |  |dd¡ | j	 
d|d  ¡}|  d| |¡ |  |d ¡}|  d| d¡ d|d  ¡ q®dS )z3This tests the "ou create" and "ou delete" commandszSucceeded to create existing ouzalready existsr   r&   r   r   r'   zDeleted ou '%s' still existsÚcreateú--description=%sr
   r   r   r   r	   N)r   r   ZassertCmdFailr   r)   r   r   ÚassertIsNoner   r   r   r   Ústr)r   r   r   r   r   r!   r    r$   r$   r%   Ú
test_newouE   sh    


ÿ

ÿ
ÿ

þ

ÿ


ÿ
ÿ


þ

ÿzOUCmdTestCase.test_newouc           	      C   sŠ   |   dd¡\}}}|  |||d¡ d}| jj| j ¡ tj|dgd}|  t|ƒdkd¡ |D ](}|j	ddd	}|  
|t|ƒd
| ¡}q\d S )Nr   ÚlistúError running listú (objectClass=organizationalUnit)r   ©ÚbaseÚscopeÚ
expressionÚattrsr   úno ous found in samdb©Úidxúou '%s' not found)r)   r   r   ÚsearchÚ	domain_dnÚldbÚSCOPE_SUBTREEÚ
assertTrueÚlenr   ÚassertMatchr-   )	r   r   r   r   Úsearch_filterÚoulistÚouobjr   r!   r$   r$   r%   Ú	test_list‚   s    ýÿzOUCmdTestCase.test_listc           
      C   s–   t | j ¡ ƒ}|  ddd|¡\}}}|  |||d¡ d}| jj|tj|dgd}|  t	|ƒdkd	¡ |D ](}|j
ddd
}|  |t |ƒd| ¡}	qhd S )Nr   r/   z-br0   r1   r   r2   r   r7   r8   r:   )r-   r   r<   r)   r   r;   r=   r>   r?   r@   r   rA   )
r   Zbase_dnr   r   r   rB   rC   rD   r   r!   r$   r$   r%   Útest_list_base_dn”   s    ýÿzOUCmdTestCase.test_list_base_dnc              	   C   sÌ   | j D ]À}d}|d | }|  ddd|d  d| ¡\}}}|  |||d|d  ¡ |  |d ¡}|  |d|d  ¡ |  |¡}|  |d| ¡ |  ddd| d|d  ¡\}}}|  |||d| ¡ qd S )	NZ
RenameTestr   r   Úrenamer   zFailed to rename ou '%s'zRenamed ou '%s' still existszRenamed ou '%s' does not exist)r   r)   r   r   r,   r   )r   r   ZousuffixZ	newounamer   r   r   r!   r$   r$   r%   Útest_rename§   s2    

þ


ÿ
ÿ
ÿ
þ

ÿzOUCmdTestCase.test_renamec           
   	   C   sœ  |   ddi¡}|  |¡\}}}|  |||¡ | jD ].}|  |d ¡ d¡}|  ddd|d  d|d  ¡\}}}|  |||d|d  ¡ |  |dd	¡ | j 	d|d  ¡}|  
d
| |¡ |  |d ¡}|  | d¡|d|d  ¡ t | jd|d |d | j ¡ f ¡}	|  | d¡|	d|d  ¡ |  ddd|	 d| ¡  ¡\}}}|  |||d|d  ¡ q2|  ddd|d  ¡\}}}|  |||d|d  ¡ d S )Nr   ZparentOUÚdnr   Zmover   zFailed to move ou '%s'r   r   zMoved ou "%s"z+Moved ou '%s' still exists with the same dnzOU=%s,OU=%s,%szMoved ou '%s' does not existr	   r&   r'   )r   r   r   r   r   r   r)   r   r   r   r   ZassertNotEqualsr=   ZDnr<   Úparent)
r   Zparentour   r   r   r   Zolddnr    r!   Znewexpecteddnr$   r$   r%   Ú	test_move½   s\    

þ


ÿÿÿÿÿÿÿÿ
þ


ÿ
ÿ


ÿzOUCmdTestCase.test_movec                 C   s”   |   ddd| j ¡  d¡\}}}|  |||d¡ |  |dd¡ | jj| j ¡ tjg d}|  t	|ƒd	kd
¡ |D ]}|  
|t|jƒd|j ¡}qpd S )Nr   Zlistobjectsr	   ú	--full-dnzFailed to list ou's objectsr   r   )r3   r4   r6   r   zno objects foundúobject '%s' not found)r)   r   r<   r   r   r;   r=   ZSCOPE_ONELEVELr?   r@   rA   r-   rI   )r   r   r   r   ÚobjlistÚobjr!   r$   r$   r%   Útest_listobjectså   s"    þ

ÿþÿzOUCmdTestCase.test_listobjectsc                 C   sŽ   |   ddd¡\}}}|  |||d¡ |  |dd¡ d}| jj| j ¡ tj|g d}|  t	|ƒd	kd
¡ |D ]}|  
|t|jƒd|j ¡}qjd S )Nr   r/   rL   zFailed to list ousr   r   r1   r2   r   zno ou objects foundrM   )r)   r   r   r   r;   r<   r=   r>   r?   r@   rA   r-   rI   )r   r   r   r   ÚfilterrN   rO   r!   r$   r$   r%   Útest_list_full_dnö   s$    ÿ

ÿýÿzOUCmdTestCase.test_list_full_dnc                 C   s$   |   ¡ | j dddœ}| |¡ |S )zRcreate an ou with random attribute values, you can specify base
        attributeséd   )Úcount)r   r
   )Z
randomNameÚupdate)r   r3   r   r$   r$   r%   r     s
    
þ
zOUCmdTestCase._randomOUc                 C   s    |   ddd|d  d|d  ¡S )Nr   r*   r   r   r+   r
   )r)   )r   r   r$   r$   r%   r     s    
ÿzOUCmdTestCase._create_ouc                 C   sH   dt  |¡d| j ¡ f }| jj| j ¡ t j|d}|r@|d S d S d S )Nz"(&(name=%s)(objectCategory=%s,%s))z1CN=Organizational-Unit,CN=Schema,CN=Configuration)r3   r4   r5   r   )r=   Zbinary_encoder   r<   r;   r>   )r   r   rB   rC   r$   r$   r%   r     s    þÿþzOUCmdTestCase._find_ou)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r(   r.   rE   rF   rH   rK   rP   rR   r   r   r   Ú__classcell__r$   r$   r"   r%   r      s   
=(r   )r   r=   Zsamba.tests.samba_tool.baser   r   r$   r$   r$   r%   Ú<module>   s   