a
    ze'                     @   s  d Z ddlZddlZddlZG dd dZdd Zdd Zd	d
 Zdd Zej	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zed-krdd.lmZ e  ejd/ Ze e   dS )0zThis script contains the actual auditing tests.

It should not be imported directly, but should be run by the test_audit
module with arguments identifying each test.

    Nc                   @   sJ   e Zd ZdZdefddZdd Zdd Zd	d
 Ze	dd Z
dd ZdS )TestHookzUsed in standard hook tests to collect any logged events.

    Should be used in a with block to ensure that it has no impact
    after the test completes.
    Nc                 C   s    |pd| _ || _g | _d| _d S )N F)raise_on_eventsexc_typeseenclosed)selfr   r   r   r   &/usr/lib/python3.9/test/audit-tests.py__init__   s    
zTestHook.__init__c                 G   s   t |  | S N)sysaddaudithookr   ar   r   r	   	__enter__   s    
zTestHook.__enter__c                 G   s   |    d S r   )closer   r   r   r	   __exit__   s    zTestHook.__exit__c                 C   s
   d| _ d S )NT)r   r   r   r   r	   r   !   s    zTestHook.closec                 C   s   dd | j D S )Nc                 S   s   g | ]}|d  qS )r   r   .0ir   r   r	   
<listcomp>&       z(TestHook.seen_events.<locals>.<listcomp>)r   r   r   r   r	   seen_events$   s    zTestHook.seen_eventsc                 C   s6   | j r
d S | j||f || jv r2| d| d S )Nz
saw event )r   r   appendr   r   )r   eventargsr   r   r	   __call__(   s
    
zTestHook.__call__)__name__
__module____qualname____doc__RuntimeErrorr
   r   r   r   propertyr   r   r   r   r   r	   r      s   
r   c                 C   s   | |krt | d|d S )N should equal AssertionErrorxyr   r   r	   assertEqual1   s    r*   c                 C   s   | |vrt | d|d S )Nz should be in r%   elZseriesr   r   r	   assertIn6   s    r-   c                 C   s   | |v rt | d|d S )Nz should not be in r%   r+   r   r   r	   assertNotIn;   s    r.   c                 C   sP   t | t |kr"t| d|tdd t| |D rLt| d|d S )Nr$   c                 s   s   | ]\}}||kV  qd S r   r   )r   ZixZiyr   r   r	   	<genexpr>C   r   z&assertSequenceEqual.<locals>.<genexpr>)lenr&   anyzipr'   r   r   r	   assertSequenceEqual@   s    r3   c              
   c   sp   zd V  dsJ d|  W nN t yj } z6t|tr8 t|| u sVJ | d|  W Y d }~n
d }~0 0 d S )NFz	expected z should be )BaseException
isinstancer&   type)Zex_typeexr   r   r	   assertRaisesG   s    
r8   c                  C   sb   t  H} tdddd t| jd d d t| jd d d W d    n1 sT0    Y  d S )N
test_event         r   )r:   r;   r<   )r   r   auditr*   r   hookr   r   r	   
test_basicR   s    r@   c               	   C   sv   t ddX} t  2}td td| j td|j W d    n1 sJ0    Y  W d    n1 sh0    Y  d S )Nsys.addaudithookr   r9   )r   r   r=   r-   r   r.   Zhook1Zhook2r   r   r	   test_block_add_hookY   s
    
rD   c               
   C   s~   t tb tdtd6} t }W d    n1 s40    Y  W d    n1 sR0    Y  W d    n1 sp0    Y  d S )NrA   )r   r   )r8   r4   r   rC   r   r   r	   !test_block_add_hook_baseexceptionc   s    
rE   c               
   C   s@  dd l } d}| |}t }t|| | | z~tdd}| || W d    n1 sb0    Y  tdd }t|| | W d    n1 s0    Y  W t	d nt	d 0 W d    n1 s0    Y  dd |j
D }t||| jfgd  d	d |j
D }t||g d
d |j
D }t|dg d S )Nr   r   bcr:   r;   r<   ztest-marshal.binwbrbc                 S   s(   g | ] \}}|d kr|d |d fqS )zmarshal.dumpsr   r:   r   r   er   r   r   r	   r   ~   r   z test_marshal.<locals>.<listcomp>r;   c                 S   s    g | ]\}}|d kr|d qS )zmarshal.loadsr   r   rK   r   r   r	   r      r   c                 S   s   g | ]\}}|d kr|qS )marshal.loadr   rK   r   r   r	   r      r   rM   )marshaldumpsr   r*   loadsopendumploadosunlinkr   r3   version)rN   opayloadr?   factualr   r   r	   test_marshaln   s"    
*06r[   c               	   C   s   dd l } G dd d}| | }| d}td| | tddL}tt | | W d    n1 sp0    Y  | | W d    n1 s0    Y  d S )Nr   c                   @   s   e Zd Zdd ZdS )z test_pickle.<locals>.PicklePrintc                 S   s   t dfS )N)Pwned!)str)r   pr   r   r	   __reduce_ex__   s    z.test_pickle.<locals>.PicklePrint.__reduce_ex__N)r   r   r    r_   r   r   r   r	   PicklePrint   s   r`   rF   r\   zpickle.find_classrB   )picklerO   r*   rP   r   r8   r"   )ra   r`   Z	payload_1Z	payload_2r?   r   r   r	   test_pickle   s    

(rb   c                  C   s   G dd d} G dd d}G dd d| }|  }t  F}d|_|f|_tjd ||f |j|_d	|_||_W d    n1 s0    Y  d
d |j	D }t
|df|df|df|dfg| d S )Nc                   @   s   e Zd ZdS )ztest_monkeypatch.<locals>.ANr   r   r    r   r   r   r	   A   s   rd   c                   @   s   e Zd ZdS )ztest_monkeypatch.<locals>.BNrc   r   r   r   r	   B   s   re   c                   @   s   e Zd ZdS )ztest_monkeypatch.<locals>.CNrc   r   r   r   r	   C   s   rf   X	__bases__{   c                 S   s(   g | ] \}}|d kr|d |d fqS )zobject.__setattr__r   r:   r   rK   r   r   r	   r      r   z$test_monkeypatch.<locals>.<listcomp>r   	__class__)r   r   rh   r6   __dict____set__r
   Znew_attrrj   r   r3   )rd   re   rf   r   r?   rZ   r   r   r	   test_monkeypatch   s    $rm   c                  C   sb  zdd l } |  j}W n ty,   d }Y n0 tdhd}ttjd dfttjdftddfttjd d	d
d d d ddd f	|tjd ffD ]>^}}|sqt	t
 ||  W d    q1 s0    Y  qW d    n1 s0    Y  dd |jD }dd |jD }tdd tjd dftjdfdtjd d	f|rFtjd dfnd fD | tg | d S )Nr   rQ   rB   r;   rrJ   r<   rI   wFc                  W   s   dS )Nr:   r   r   r   r   r	   <lambda>   r   ztest_open.<locals>.<lambda>c                 S   s0   g | ](\}}|d kr|d r|d |d fqS )rQ   r:   r   r   rK   r   r   r	   r      r   ztest_open.<locals>.<listcomp>c                 S   s0   g | ](\}}|d kr|d s|d |d fqS )rQ   r:   r   r;   r   rK   r   r   r	   r      r   c                 S   s   g | ]}|d ur|qS r   r   r   r   r   r	   r      s   )r<   ro   )sslZcreate_default_contextload_dh_paramsImportErrorr   rQ   r   argv
executabler8   r"   r   r3   )rs   rt   r?   fnr   Zactual_modeZactual_flagr   r   r	   	test_open   s<    


Fry   c               	      s   g   fdd} t | }zlt H}td d|_td d|_td d|_td	 d
|_W d    n1 sp0    Y  W t | nt | 0 tdgd   d S )Nc                    s   | j tjjkr | d S r   )f_coder   r   __code__r   )framer   r   Ztracedr   r	   trace   s    ztest_cantrace.<locals>.trace1F2T3r:   4r   call   )r   settracer   evalZ__cantrace__r3   )r~   oldr?   r   r}   r	   test_cantrace   s    
&r   c                  C   sZ   dd l } t 8}|  dd t|jd d d d d W d    n1 sL0    Y  d S )Nr   rp      r:   r;   )rp   r   )mmapr   r*   r   )r   r?   r   r   r	   	test_mmap	  s    r   c                     s0   dd   fdd} t |   t _tdd S )Nc                 S   s   | t urt| || d S r   )r"   r   __excepthook__)r   	exc_valueexc_tbr   r   r	   
excepthook  s    z#test_excepthook.<locals>.excepthookc                    sr   | dkrnt |d |d s8td|d d|d d|d  kr\td|d  d	  t| t|d  d S )
Nzsys.excepthookr;   r:   zExpected isinstance(z, )r   	Expected  == )r5   	TypeError
ValueErrorprintreprr   r   r   r   r	   r?     s    ztest_excepthook.<locals>.hookzfatal-error)r   r   r   r"   r>   r   r   r	   test_excepthook  s
    
r   c                     sD   ddl m}  dd   fdd}t|  t_| tddd  d S )	Nr   )write_unraisable_excc                 S   s   d S r   r   )Zhookargsr   r   r	   unraisablehook&  s    z+test_unraisablehook.<locals>.unraisablehookc                    sL   | dkrH|d  kr,t d|d  d  t| t|d j|d j d S )Nzsys.unraisablehookr   r   r   r:   )r   r   r   r   err_msgr   r   r   r	   r?   )  s    z!test_unraisablehook.<locals>.hookznonfatal-errorzfor audit hook test)Z	_testcapir   r   r   r   r"   )r   r?   r   r   r	   test_unraisablehook#  s    
r   c                  C   s|   ddl m} m}m}m} dd }t| | |d}||d z||d W n ty^   Y n
0 td|	 }|| d S )Nr   )OpenKeyEnumKeyCloseKeyHKEY_LOCAL_MACHINEc                 S   s"   |  dsd S t| g|R   d S )Nzwinreg.
startswithr   r   r   r   r	   r?   7  s    
ztest_winreg.<locals>.hookZSoftwarei'  z%Expected EnumKey(HKLM, 10000) to fail)
winregr   r   r   r   r   r   OSErrorr"   Detach)r   r   r   r   r?   kZkvr   r   r	   test_winreg4  s    


r   c                  C   sp   dd l } dd }t| |   |  | j| j}z.z|d W n tyT   Y n0 W |  n
|  0 d S )Nr   c                 S   s   |  drt| g|R   d S )Nzsocket.r   r   r   r   r	   r?   N  s    
ztest_socket.<locals>.hook)z	127.0.0.1i  )	socketr   r   gethostnameAF_INETSOCK_STREAMbind	Exceptionr   )r   r?   sockr   r   r	   test_socketK  s    
r   c                  C   sJ   dd l } dd }t| | jdd t }|g}| | | | d S )Nr   c                 S   s   |  drt| g|R   d S )Nzgc.r   r   r   r   r	   r?   d  s    
ztest_gc.<locals>.hookr:   )Z
generation)gcr   r   get_objectsobjectZget_referrersZget_referents)r   r?   r(   r)   r   r   r	   test_gca  s    

r   c                  C   sB   dd l } dd }t| |  D ]}t|tr"||vs"J q"d S )Nr   c                  W   s   d S r   r   rq   r   r   r	   rr   v  r   z test_not_in_gc.<locals>.<lambda>)r   r   r   r   r5   list)r   r?   rW   r   r   r	   test_not_in_gcs  s    

r   __main__)suppress_msvcrt_assertsr:   ) r!   
contextlibrT   r   r   r*   r-   r.   r3   contextmanagerr8   r@   rD   rE   r[   rb   rm   ry   r   r   r   r   r   r   r   r   r   Ztest.supportr   rv   testglobalsr   r   r   r	   <module>   s<   $


 +!

