o
    g*                     @   s  	 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d,d- Zed.krd d/lmZ e  ejd0 Ze e   dS dS )1    Nc                   @   sH   e 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 )TestHookNc                 C   s    |pd| _ || _g | _d| _d S )N F)raise_on_eventsexc_typeseenclosed)selfr   r   r   r   F/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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>&   s    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 r| d| d S )Nz
saw event )r   r   appendr   r   )r   eventargsr   r   r	   __call__(   s   
zTestHook.__call__)__name__
__module____qualname__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      r(   c                 C   s   | |vrt | d|d S )Nz should be in r#   ZelZseriesr   r   r	   assertIn6   r)   r+   c                 C   s   | |v rt | d|d S )Nz should not be in r#   r*   r   r   r	   assertNotIn;   r)   r,   c                 C   sP   t | t |krt| d|tdd t| |D r&t| d|d S )Nr"   c                 s   s    | ]	\}}||kV  qd S r   r   )r   ZixZiyr   r   r	   	<genexpr>C   s    z&assertSequenceEqual.<locals>.<genexpr>)lenr$   anyzipr%   r   r   r	   assertSequenceEqual@   s
   r1   c              
   c   sB    zd V  W d S  t y  } zt|tr W Y d }~d S d }~ww r   )BaseException
isinstancer$   )Zex_typeexr   r   r	   assertRaisesG   s   
r5   c                  C   sd   t  %} tdddd t| jd d d t| jd d d W d    d S 1 s+w   Y  d S )N
test_event         r   )r7   r8   r9   )r   r   auditr(   r   hookr   r   r	   
test_basicR   s
   "r=   c               	   C   s   t dd5} t  }td td| j td|j W d    n1 s%w   Y  W d    d S W d    d S 1 s=w   Y  d S )Nsys.addaudithookr   r6   )r   r   r:   r+   r   r,   Zhook1Zhook2r   r   r	   test_block_add_hookY   s   
"rA   c               
   C   s   t t: tdtd} t }W d    n1 sw   Y  W d    n1 s)w   Y  W d    d S W d    d S 1 sAw   Y  d S )Nr>   )r   r   )r5   r2   r   r@   r   r   r	   !test_block_add_hook_baseexceptionc   s   
"rB   c               
   C   s@  dd l } d}| |}t Y}t|| | | z?tdd}| || W d    n1 s1w   Y  tdd}t|| | W d    n1 sNw   Y  W t	d nt	d w W d    n1 sjw   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cr7   r8   r9   ztest-marshal.binwbrbc                 S   (   g | ]\}}|d kr|d |d fqS )zmarshal.dumpsr   r7   r   r   er   r   r   r	   r   ~      ( z test_marshal.<locals>.<listcomp>r8   c                 S   s    g | ]\}}|d kr|d qS )zmarshal.loadsr   r   rI   r   r   r	   r      s     c                 S   s   g | ]
\}}|d kr|qS )marshal.loadr   rI   r   r   r	   r      s    rL   )marshaldumpsr   r(   loadsopendumploadosunlinkr   r1   version)rM   opayloadr<   factualr   r   r	   test_marshaln   s*   
rZ   c               	   C   s   dd l } G dd d}| | }| d}td| | tdd'}tt | | W d    n1 s8w   Y  | | W d    d S 1 sMw   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_   rC   r[   zpickle.find_classr?   )picklerN   r(   rO   r   r5   r    )r`   r_   Z	payload_1Z	payload_2r<   r   r   r	   test_pickle   s   

"ra   c                  C   s   G dd d} G dd d}G dd d| }|  }t  #}d|_|f|_tjd ||f |j|_d	|_||_W d    n1 sBw   Y  d
d |j	D }t
|df|df|df|dfg| d S )Nc                   @      e Zd ZdS )ztest_monkeypatch.<locals>.ANr   r   r   r   r   r   r	   A       rd   c                   @   rb   )ztest_monkeypatch.<locals>.BNrc   r   r   r   r	   B   re   rf   c                   @   rb   )ztest_monkeypatch.<locals>.CNrc   r   r   r   r	   C   re   rg   X	__bases__{   c                 S   rH   )zobject.__setattr__r   r7   r   rI   r   r   r	   r      rK   z$test_monkeypatch.<locals>.<listcomp>r   	__class__)r   r   ri   type__dict____set__r
   Znew_attrrk   r   r1   )rd   rf   rg   r   r<   rY   r   r   r	   test_monkeypatch   s    ro   c                  C   s`  zdd l } |  j}W n ty   d }Y nw tdhdO}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 ]^}}|sLqEt	t
 ||  W d    qE1 s_w   Y  qEW d    n1 sow   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|rtjd dfnd fD | tg | d S )Nr   rP   r?   r8   rrG   r9   rF   wFc                  W   s   dS )Nr7   r   )r   r   r   r	   <lambda>   s    ztest_open.<locals>.<lambda>c                 S   s0   g | ]\}}|d kr|d r|d |d fqS )rP   r7   r   r   rI   r   r   r	   r         0 ztest_open.<locals>.<listcomp>c                 S   s0   g | ]\}}|d kr|d s|d |d fqS )rP   r7   r   r8   r   rI   r   r   r	   r      rt   c                 S   s   g | ]}|d ur|qS r   r   r   r   r   r	   r      s    )r9   rq   )sslZcreate_default_contextload_dh_paramsImportErrorr   rP   r   argv
executabler5   r    r   r1   )ru   rv   r<   fnr   Zactual_modeZactual_flagr   r   r	   	test_open   sD   


r{   c               	      s   g   fdd} t | }z6t $}td d|_td d|_td d|_td	 d
|_W d    n1 s8w   Y  W t | nt | w tdgd   d S )Nc                    s    | j tjjkr | d S d S r   )f_coder   r   __code__r   )framer   r   Ztracedr   r	   trace   s   ztest_cantrace.<locals>.trace1F2T3r7   4r   call   )r   settracer   evalZ__cantrace__r1   )r   oldr<   r   r   r	   test_cantrace   s"   
r   c                  C   s\   dd l } t }|  dd t|jd d d d d W d    d S 1 s'w   Y  d S )Nr   rr      r7   r8   )rr   r   )mmapr   r(   r   )r   r<   r   r   r	   	test_mmap	  s
   "r   c                     s,   dd   fdd} t |   t _td)Nc                 S   s   | t urt| || d S d S r   )r    r   __excepthook__)r   	exc_valueexc_tbr   r   r	   
excepthook  r)   z#test_excepthook.<locals>.excepthookc                    sv   | dkr9t |d |d std|d d|d d|d  kr.td|d  d	  t| t|d  d S d S )
Nzsys.excepthookr8   r7   zExpected isinstance(z, )r   	Expected  == )r3   	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                    sP   | dkr&|d  krt d|d  d  t| t|d j|d j d S d S )Nzsys.unraisablehookr   r   r   r7   )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   sz   ddl m} m}m}m} dd }t| | |d}||d z
||d W td ty2   Y nw |	 }|| 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   s|   dd l } dd }t| |   |  | j| j}zz|d W n	 ty*   Y nw W |  d S W |  d S |  w )Nr   c                 S   "   |  drt| g|R   d S d S )Nzsocket.r   r   r   r   r	   r<   N     
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   r   )Nzgc.r   r   r   r   r	   r<   d  r   ztest_gc.<locals>.hookr7   )Z
generation)gcr   r   Zget_objectsobjectZget_referrersZget_referents)r   r<   r&   r'   r   r   r	   test_gca  s   

r   c                  C   s|   dd l } dd }t| | jd}z%z|dd W n ty*   tdd Y nw W |  d S W |  d S |  w )	Nr   c                 S   s*   |  drt| g|dd  R   d S d S )Nzhttp.client.r7   r   r   r   r   r	   r<   v  s   
ztest_http_client.<locals>.hookzwww.python.orgGET/zhttp.client.sendz[cannot send])	Zhttp.clientr   r   clientZHTTPConnectionZrequestr   r   r   )httpr<   connr   r   r	   test_http_clients  s   
r   c                  C   st   dd l } dd }t| | d}| d}t| jdr8|d z
|d W t	d | jy7   Y d S w d S )	Nr   c                 W   r   )Nzsqlite3.r   r   r   r   r	   r<     r   ztest_sqlite3.<locals>.hookz:memory:enable_load_extensionFtestz'Expected sqlite3.load_extension to fail)
sqlite3r   r   connect
Connectionhasattrr   Zload_extensionZOperationalErrorr    )r   r<   Zcx1Zcx2r   r   r	   test_sqlite3  s   



r   __main__)suppress_msvcrt_assertsr7   ) 
contextlibrS   r   r   r(   r+   r,   r1   contextmanagerr5   r=   rA   rB   rZ   ra   ro   r{   r   r   r   r   r   r   r   r   r   r   Ztest.supportr   rx   r   globalsr   r   r   r	   <module>   sB    $


 +!
