a
    W×a$:  ć                   @   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i fddZi fddZdddZdd Zdd Z  ZS )ŚContactCmdTestCasez(Tests for samba-tool contact subcommandsNc              
      sl  t t|  ”  dtjd tjd f | _|  ddtjd  | j”| _d }g | _|  	ddd”}| j 
|” |  	d	d	d
”}| j 
|” |  	dddddddd”}| j 
|” |  	ddddd”}| j 
|” | jD ]}|  |”\}}}|  |||” |  d|d” |  d|d  |” |  |d ”}|  |” |d }|  d| d” |” |  d| d” |d ” qŅd S )Nz-U%s%%%sZDC_USERNAMEZDC_PASSWORDz-Hz	ldap://%sZ	DC_SERVERZcontact1)ŚexpectednameŚnameZcontact2)r   Ś	givenNameZcontact3Zcontact3displaynameZnot_contact3ŚIZ12345)r   r   ŚdisplayNamer   ŚinitialsŚsnŚmobilezJames T. KirkZKirkŚTZJames)r   r
   r	   r   ZERRORś$There shouldn't be any error messageś!Contact '%s' created successfullyr   ś%sr   Śdescription)Śsuperr   ŚsetUpŚosŚenvironŚcredsZgetSamDBŚsamdbŚcontactsŚ_randomContactŚappendŚ_create_contactŚassertCmdSuccessZassertNotInŚassertInŚ_find_contactZassertIsNotNoneŚassertEqualŚget)ŚselfŚcontactŚresultŚoutŚerrŚfoundŚcontactname©Ś	__class__© ś@/usr/lib/python3/dist-packages/samba/tests/samba_tool/contact.pyr      sf    
’ž’’śż
’’’
’zContactCmdTestCase.setUpc              	      s`   t t|  ”  | jD ]F}|  |d ”r|  ddd|d  ”\}}}|  |||d|d  ” qd S )Nr   r!   Śdeleter   śFailed to delete contact '%s')r   r   ŚtearDownr   r   Ś	runsubcmdr   )r    r!   r"   r#   r$   r'   r)   r*   r-   U   s    
’

’’zContactCmdTestCase.tearDownc           	   	   C   sŖ  | j D ],}|  |”\}}}|  |d” |  d|” q| j D ]Z}|  ddd|d  ”\}}}|  |||d|d  ” |  |d ”}|  |d|d  ” q:|  d	d
i”}|  	|”\}}}|  |||” | j D ]}| j|dd\}}}|  |||” |  
|dd” |  d|d  |” |  |d ”}|d }|  
d| d	” |” |  
d| d” |d ” qČ| j D ]~}t | jd|d |d	 | j ” f ”}|  ddd| ”\}}}|  |||d|d  ” |  |d ”}|  |d|d  ” q^|  ddd|d	  ”\}}}|  |||d|d	  ” | j D ]}|  |”\}}}|  |||” |  
|dd” |  d|d  |” |  |d ”}|d }|  
d| d	” |” |  
d| d” |d ” qdS )z=This tests the "contact create" and "contact delete" commandsz$Succeeded to create existing contactzalready existsr!   r+   r   r   r,   z!Deleted contact '%s' still existsr   ZtestOUz	OU=testOU)ŚouŚ r   r   r   śCN=%s,OU=%s,%sr/   śOU=%sśFailed to delete ou '%s'N)r   r   ZassertCmdFailr   r.   r   r   ZassertIsNoneŚ	_randomOUŚ
_create_our   r   ŚldbŚDnr   Ś	domain_dn)	r    r!   r"   r#   r$   r%   Śparentour&   Z
expecteddnr)   r)   r*   Śtest_newcontact`   s¢    


’
’’’’
’’’
ž’’
’
’’’’
’


’
’’’z"ContactCmdTestCase.test_newcontactc                 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=contact)r   ©ŚbaseZscopeZ
expressionŚattrsr   śno contacts found in samdb©Śidxścontact '%s' not found)r.   r   r   Śsearchr8   r6   ŚSCOPE_SUBTREEŚ
assertTrueŚlenr   ŚassertMatchŚstr)r    r"   r#   r$   Śsearch_filterŚcontactlistŚ
contactobjr   r)   r)   r*   Ś	test_list®   s    ż’zContactCmdTestCase.test_listc                 C   s   |   ddd”\}}}|  |||d” d}| jj| j ” tj|dgd}|  t|dkd	” |D ]"}|  	|t
|jd
t
|j ” q^d S )Nr!   r;   z	--full-dnr<   r=   Śdnr>   r   rA   rD   )r.   r   r   rE   r8   r6   rF   rG   rH   rI   rJ   rO   )r    r"   r#   r$   rK   rL   rM   r)   r)   r*   Śtest_list_full_dnæ   s    ż’z$ContactCmdTestCase.test_list_full_dnc           	      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-br<   r=   r   r>   r   rA   rB   rD   )rJ   r   r8   r.   r   rE   r6   rF   rG   rH   r   rI   )	r    Zbase_dnr"   r#   r$   rK   rL   rM   r   r)   r)   r*   Śtest_list_base_dnĻ   s"    ’
ż’z$ContactCmdTestCase.test_list_base_dnc           
   	   C   s  |   ddi”}|  |”\}}}|  |||” | jD ]&}|  |d ” d”}|  ddd|d  d|d  ”\}}}|  |||d	|d  ” |  |d
d” |  d|d  |” |  |d ”}|  	| d”|d|d  ” |d }t
 | jd||d | j ” f ”}	|  | d”|	d|d  ” |  ddd|d  d| ”  ”\}}}|  |||d	|d  ” q2|  ddd|d  ”\}}}|  |||d|d  ” d S )Nr   ZparentOUr   rO   r!   Zmover   r2   zFailed to move contact '%s'r0   r   zMoved contact "%s"z0Moved contact '%s' still exists with the same dnr1   z!Moved contact '%s' does not existr/   r+   r3   )r4   r5   r   r   r   r   r.   r   r   ZassertNotEqualsr6   r7   r   r8   Śparent)
r    r9   r"   r#   r$   r!   Zolddnr%   r&   Znewexpecteddnr)   r)   r*   Ś	test_moveā   sf    

ž

’’’’ž’’’’

ž

’’
’


’zContactCmdTestCase.test_movec                 C   s   d| j ddi}| |” |S )zVCreate a contact with random attribute values, you can specify base
        attributesr   éd   ©Ścount©Z
randomNameŚupdate)r    r?   r!   r)   r)   r*   r     s    ’
z!ContactCmdTestCase._randomContactc                 C   s$   |   ” | j ddd}| |” |S )zSCreate an ou with random attribute values, you can specify base
        attributes.rT   rU   )r   r   rW   )r    r?   r/   r)   r)   r*   r4     s
    
ž
zContactCmdTestCase._randomOUc                 C   sü   d}d|v r|d  |d ”7 }|d  | j”7 }|d urD|d  |”7 }d|v r^|d  |d ”7 }d|v rx|d	  |d ”7 }d
|v r|d  |d
 ”7 }d|v r¬|d  |d ”7 }d|v rĘ|d  |d ”7 }d|v rą|d  |d ”7 }| ” }| jddg|¢R  S )Nr0   r   z{0}z {0}z	 --ou={0}r   z --description={0}r
   z --surname={0}r	   z --initials={0}r   z --given-name={0}r   z --display-name={0}r   z --mobile-number={0}r!   Ścreate)Śformatr   Śsplitr.   )r    r!   r/   Śargsr)   r)   r*   r   %  s(    z"ContactCmdTestCase._create_contactc                 C   s    |   ddd|d  d|d  ”S )Nr/   rY   r2   r   z--description=%sr   )r.   )r    r/   r)   r)   r*   r5   A  s
    

żzContactCmdTestCase._create_ouc                 C   sB   |}dt  |” }| jj| j ” t j|g d}|r:|d S d S d S )Nz!(&(objectClass=contact)(name=%s))r>   r   )r6   Zbinary_encoder   rE   r8   rF   )r    r   r&   rK   rL   r)   r)   r*   r   G  s    ’żz ContactCmdTestCase._find_contact)N)Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r   r   r-   r:   rN   rP   rQ   rS   r   r4   r   r5   r   Ś__classcell__r)   r)   r'   r*   r      s   7N+
r   )r   r6   Zsamba.tests.samba_tool.baser   r   r)   r)   r)   r*   Ś<module>   s   