a
    Wa                     @   s   d dl mZ d dlZejd d d dlZd dlZd dlmZ d dl	m
Z
 d dlZe  G dd deZe Ze Zed kred  nede  ed	 dS )
    )print_functionNz
bin/python)drsuapi)integer_typesc                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )RpcTestsz5test type behaviour of pidl generated python RPC codec                 C   s<   t |}|du r|| j8 }|| }|dkr8td|  dS )z4check that the number of allocated blocks is correctNr   zLeaked %d blocks)talloctotal_blocksinitial_blocksprint)selfobjectZnum_expectedZnblocksZleaked_blocks r   </usr/lib/python3/dist-packages/samba/tests/dcerpc/testrpc.pycheck_blocks"   s    

zRpcTests.check_blocksc           	      C   sr  t d|  | }t|D ]P}|d dkr.qzt||}W n ty } zt|dkrt d||f  |  jd7  _W Y d }~qt t|dd  t|dd dkrt d	||f  |  jd7  _W Y d }~qn*t d
||f  |  jd7  _W Y d }~qW Y d }~n>d }~0  tyL   t d
||f  |  jd7  _Y qY n0 z t d||f  t||| W n ty } zft|t	rt|
drW Y d }~qn0t d|||j|f  |  jd7  _W Y d }~qW Y d }~n
d }~0 0 z2|t||kr t d|||t||f  W qW q tyj } z.t d|||j|f  W Y d }~qW Y d }~qd }~0 0 qd S )NzChecking type %sr   _zunknown union levelz#ERROR: Unknown union level in %s.%s      zCan not convert C TypezERROR: Unknown C type for %s.%sz"ERROR: Failed to instantiate %s.%szSetting %s.%szis read-onlyz"ERROR: Failed to set %s.%s: %r: %sz,ERROR: Comparison failed for %s.%s: %r != %rz*ERROR: compare exception for %s.%s: %r: %s)r	   dirgetattr	TypeErrorstrerrcount	Exceptionsetattr
isinstanceAttributeErrorendswith	__class__)	r
   	interfacetypenametypevnvalueZerrstrer   r   r   
check_type+   sP     
"zRpcTests.check_typec                 C   s  | j }t|D ]}|d dks||kr(qt||}t|tr>qt|trJqt|trz(td }| 	||| | 
d | W q ty } z0td|||j|f  |  j d7  _ W Y d }~qd }~0 0 qt|rqtd||f  q| j | dkr
td| j | |f  d S )Nr   r   z)ERROR: Failed to check_type %s.%s: %r: %sr   zUNKNOWN: %s=%szFound %d errors in %s)r   r   r   r   r   r   r   r   r   r$   r   r   r	   r   callable)r
   r   inamer   r!   r"   r   r#   r   r   r   check_interface\   s,    




&zRpcTests.check_interfacec                 C   sn   t tjD ]^}|d dkrq
|dks
|dkr.q
td|  ttj|}td }| || | d | q
d S )Nr   r   ZClientConnectionbasezChecking interface %s)	r   sambaZdcerpcr	   r   r   r   r'   r   )r
   r&   Zifacer   r   r   r   check_all_interfacesx   s    
zRpcTests.check_all_interfacesc                 C   s    t d | _d| _|   | jS )Nr   )r   r   r   r   r*   )r
   r   r   r   run   s    zRpcTests.runN)	__name__
__module____qualname____doc__r   r$   r'   r*   r+   r   r   r   r   r      s   	1r   z%d failuresr   )Z
__future__r   syspathinsertr)   Zsamba.testsZsamba.dcerpcr   Zsamba.compatr   r   Zenable_null_trackingr   r   Ztestsr+   r   exitr	   r   r   r   r   <module>   s   l