a
    “I_e  ã                   @   sP   d Z ddlmZ ddlZddlmZmZ ddlZddl	Z	G dd„ dej
jƒZdS )zBTests for array handling in PIDL generated bindings samba.dcerpc.*é    )ÚdrsblobsN)Ú
ndr_unpackÚndr_packc                       sP   e 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	‡  Z
S )Ú
ArrayTestsc                    s$   t t| ƒ ¡  t ¡  t ¡ | _d S )N)Úsuperr   ÚsetUpÚtallocZenable_null_trackingÚtotal_blocksÚstartup_blocks©Úself©Ú	__class__© ú:/usr/lib/python3/dist-packages/samba/tests/dcerpc/array.pyr      s    zArrayTests.setUpc                    s:   t t| ƒ ¡  t ¡  t ¡ | jkr6t ¡  |  	d¡ d S )Nz it appears we are leaking memory)
r   r   ÚtearDownÚgcÚcollectr   r	   r
   Zreport_fullÚfailr   r   r   r   r   "   s
    zArrayTests.tearDownc                 C   sê   t  ¡ }d|_t  ¡ |_d|j_t  ¡ }d|_d|_t  ¡ }d|_d|_t  ¡ }d|_d|_|||g|j_t	 
¡  |  |¡ |  |jd¡ |  |j¡ |  |jjd¡ |  t|jjƒ|jj¡ |  |jjd ¡ |  |jjd jd¡ d S ©Né   é   é   r   )r   ÚreplPropertyMetaDataBlobÚversionÚreplPropertyMetaDataCtr1ÚctrÚcountÚreplPropertyMetaData1ÚattidÚarrayr   r   ÚassertIsNotNoneÚassertEqualÚlen©r   ÚrmdÚrmd1Úrmd2Úrmd3r   r   r   Útest_array_from_python)   s,    

z!ArrayTests.test_array_from_pythonc                 C   s  zðt  ¡ }d|_t  ¡ |_d|j_t  ¡ }d|_d|_t  ¡ }d|_d|_t  ¡ }d|_d|_|||g|j_t	 
¡  |  |¡ |  |jd¡ |  |j¡ |  |jjd¡ |  t|jjƒ|jj¡ |  |jjd ¡ |  |jjd jd¡ tƒ ‚W n   Y n0 d S r   )r   r   r   r   r   r   r   r   r    r   r   r!   r"   r#   Ú	Exceptionr$   r   r   r   Útest_array_with_exceptionG   s4    


z$ArrayTests.test_array_with_exceptionc                 C   sŽ   dd„ }|ƒ }t  ¡  |  |¡ |  |jd¡ |  |j¡ |  |jjd¡ |  t|jjƒ|jj¡ |  |jjd ¡ |  |jjd j	d¡ d S )Nc                  S   sn   t  ¡ } d| _t  ¡ | _d| j_t  ¡ }d|_d|_t  ¡ }d|_d|_t  ¡ }d|_d|_|||g| j_| S )Nr   r   r   )	r   r   r   r   r   r   r   r   r    )r%   r&   r'   r(   r   r   r   Úget_rmdl   s    
z;ArrayTests.test_array_from_python_function.<locals>.get_rmdr   r   r   )
r   r   r!   r"   r   r   r   r#   r    r   )r   r,   r%   r   r   r   Útest_array_from_python_functionk   s    
z*ArrayTests.test_array_from_python_functionc                 C   s  t  ¡ }d|_t  ¡ |_d|j_t  ¡ }d|_d|_t  ¡ }d|_d|_t  ¡ }d|_d|_|||g|j_t	|ƒ}t
 ¡  tt j|ƒ}|  |¡ |  |jd¡ |  |j¡ |  |jjd¡ |  t|jjƒ|jj¡ |  |jjd ¡ |  |jjd jd¡ |  |jjd j|jjd j¡ d S r   )r   r   r   r   r   r   r   r   r    r   r   r   r   r!   r"   r#   )r   r%   r&   r'   r(   ZpackedZrmd_unpackedr   r   r   Útest_array_from_ndrŒ   s6    

ÿzArrayTests.test_array_from_ndrc              
   C   sà   t  ¡ }d|_t  ¡ |_d|j_t  ¡ }d|_d|_t  ¡ }d|_d|_t  ¡ }d|_d|_|||g|j_z|`|  	d¡ W n$ t
y  } zW Y d }~n
d }~0 0 z|j`|  	d¡ W n$ t
yÚ } zW Y d }~n
d }~0 0 d S )Nr   r   r   z"succeeded in deleting rmd1.versionz#succeeded in deleting rmd.ctr.array)r   r   r   r   r   r   r   r   r    r   ÚAttributeError)r   r%   r&   r'   r(   Úer   r   r   Útest_array_delete°   s0    
zArrayTests.test_array_delete)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r+   r-   r.   r1   Ú__classcell__r   r   r   r   r      s   $!$r   )Ú__doc__Zsamba.dcerpcr   Zsamba.testsZsambaZ	samba.ndrr   r   r   r   ZtestsZTestCaser   r   r   r   r   Ú<module>   s   