a
    a                     @   s   d dl mZ d dlmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
 ejejddZG dd	 d	eZG d
d deZG dd deZdS )    )print_function)BlackboxTestCaseN)check_output)SamDBZ
SRCDIR_ABSz(source4/scripting/bin/samba_downgrade_dbc                       s<   e Zd ZdZ fddZ fddZdd Zdd	 Z  ZS )
DowngradeTestBasez>Test that sambadowngradedatabase downgrades the samba databasec                    s   t t|   t| ds"| d d}|j| d}| |d tj	| j
d tj	 d| _tj| jdgd	| _| jjd
tjdgd}|d d }dd |D } fdd|D | _| j| j d S )Nbackendz%Subclass this class and set 'backend'zsamba-tool domain provision --domain FOO --realm foo.example.com --targetdir {self.tempdir} --backend-store {self.backend} --host-name downgradetest --option="vfs objects=fake_acls xattr_tdb"selfzProvisioning for downgradeprivatezsam.ldbzmodules:)Zoptionsz
@PARTITION	partitionbaseZscopeattrsr   c                 S   s   g | ]}t |d d qS ):   )strsplit.0p r   H/usr/lib/python3/dist-packages/samba/tests/blackbox/downgradedatabase.py
<listcomp>7       z+DowngradeTestBase.setUp.<locals>.<listcomp>c                    s   g | ]}t j |qS r   )ospathjoinr   Zprivate_dirr   r   r   8   s   )superr   setUphasattrZfailformat	check_runr   r   r   tempdirsam_pathldbZLdbsearch
SCOPE_BASEdbsappend)r	   Zprov_cmdZ
partitions	__class__r   r   r   !   s&    


zDowngradeTestBase.setUpc                    s   t tj| jd t tj| jd t tj| jd t tj| jd t tj| jd ttj| jd ttj| jd tt| 	  d S )Nr
   etcstatezbind-dnszmsg.lockz	names.tdbzgencache.tdb)
shutilZrmtreer   r   r   r#   unlinkr   r   tearDownr   r*   r   r   r0   <   s    zDowngradeTestBase.tearDownc                    s   g }| j D ]8}tdd|g}|d}|d}|dd |D 7 }q
dfdd	|D }d
  fdd	|D }dd	 |D }dfdd	|D }dd |D }|||fS )Nzbin/ldbdumpz-izutf-8
c                 S   s   g | ]}| d r|qS )#
startswithr   sr   r   r   r   Q   r   z?DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<listcomp>z# key: GUID=c                    s&   h | ]}|  r|t d  qS Nr4   lenr   c)guid_key_tagr   r   	<setcomp>T   s   
z>DowngradeTestBase.ldbdump_keys_pack_formats.<locals>.<setcomp>z
# key: DN=c                    s&   h | ]}|  r|t d  qS r7   r8   r:   )
dn_key_tagr   r   r=   X   s   
c                 S   s   h | ]}| d s|qS )@r3   )r   dr   r   r   r=   \   r   z# pack format: c                    s&   h | ]}|  r|t d  qS r7   r8   r:   )pack_format_tagr   r   r=   _   s   
c                 S   s   g | ]}t |d qS )   )intr5   r   r   r   r   a   r   )r(   r   decoder   )r	   ZcommentsZdbdump	guid_keysdn_keysZdn_keys_no_at_attrspack_formatsr   )r>   r<   rA   r   ldbdump_keys_pack_formatsJ   s    


z+DowngradeTestBase.ldbdump_keys_pack_formatsc                    sH   | j jdt jdgd | t d  d  } fdd|D }|S )Nz@ATTRIBUTES*r   r   r   c                    s   h | ]}t  d  |qS )r   )r   get)r   kZat_attributesr   r   r=   l   r   z4DowngradeTestBase.attribute_types.<locals>.<setcomp>)r%   r&   r'   assertEqualr9   keys)r	   rO   attribute_typesr   rM   r   rP   f   s    z!DowngradeTestBase.attribute_types)	__name__
__module____qualname____doc__r   r0   rI   rP   __classcell__r   r   r*   r   r      s
   r   c                   @   s   e Zd ZdZdd ZdS )DowngradeTestTDBZtdbc                 C   s   d}t jt|d  }|  \}}}| t|d | t|d | ||  v  | |t jg t|}| j	dt
| jf dd |  \}}}| t|d | t|| | ||  v | |t jg d S NZLDB_SYNTAX_   r   z%s -H %szRunning sambadowngradedatabase)msgr%   ZSYNTAX_ORDERED_INTEGERr9   rI   ZassertGreaterrN   Z
assertTruerP   ZPACKING_FORMAT_V2r"   COMMANDr$   ZPACKING_FORMATr	   Ztype_prefixZordered_int_typerG   rF   rH   Znum_guid_keys_before_downgrader   r   r   test_downgrade_databasew   s     z(DowngradeTestTDB.test_downgrade_databaseN)rQ   rR   rS   r   r]   r   r   r   r   rV   p   s   rV   c                   @   s   e Zd ZdZdd ZdS )DowngradeTestMDBZmdbc                 C   s   d}t jt|d  }|  \}}}| t|d | t|d | ||  v  | |t jg t|}| j	dt
| jf dd |  \}}}| t|| | t|d | ||  v | |t jg d S rW   rZ   r\   r   r   r   test_undo_guid   s     zDowngradeTestMDB.test_undo_guidN)rQ   rR   rS   r   r_   r   r   r   r   r^      s   r^   )Z
__future__r   Zsamba.testsr   r   r%   r.   
subprocessr   Zsamba.samdbr   r   r   environrK   r[   r   rV   r^   r   r   r   r   <module>   s   R