o
    GXhi-                     @   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d-d. Zd/d0 Zd1d2 Zed3krdd4lmZ e  ej d5 Z!e" e!   dS dS )6zThis 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   :/opt/python-3.10.19/usr/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____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      r)   c                 C   s   | |vrt | d|d S )Nz should be in r$   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
   r3   c              
   c   sh    z
d V  J d|   t y3 } zt|tr t|| u s(J | d|  W Y d }~d S d }~ww )NFz	expected z should be )BaseException
isinstancer%   type)Zex_typeexr   r   r	   assertRaisesG   s   
,r8   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   )r:   r;   r<   )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   r9   )r   r   r=   r-   r   r.   Zhook1Zhook2r   r   r	   test_block_add_hookY   s   
"rD   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 )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 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cr:   r;   r<   ztest-marshal.binwbrbc                 S   (   g | ]\}}|d kr|d |d fqS )zmarshal.dumpsr   r:   r   r   er   r   r   r	   r   ~      ( z test_marshal.<locals>.<listcomp>r;   c                 S   s    g | ]\}}|d kr|d qS )zmarshal.loadsr   r   rL   r   r   r	   r      s     c                 S   s   g | ]
\}}|d kr|qS )marshal.loadr   rL   r   r   r	   r      s    rO   )marshaldumpsr   r)   loadsopendumploadosunlinkr   r3   version)rP   opayloadr?   factualr   r   r	   test_marshaln   s*   
r]   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   ra   r   r   r   r	   PicklePrint   s    rb   rF   r^   zpickle.find_classrB   )picklerQ   r)   rR   r   r8   r!   )rc   rb   Z	payload_1Z	payload_2r?   r   r   r	   test_pickle   s   

"rd   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       rg   c                   @   re   )ztest_monkeypatch.<locals>.BNrf   r   r   r   r	   B   rh   ri   c                   @   re   )ztest_monkeypatch.<locals>.CNrf   r   r   r   r	   C   rh   rj   X	__bases__{   c                 S   rK   )zobject.__setattr__r   r:   r   rL   r   r   r	   r      rN   z$test_monkeypatch.<locals>.<listcomp>r   	__class__)r   r   rl   r6   __dict____set__r
   Znew_attrrn   r   r3   )rg   ri   rj   r   r?   r\   r   r   r	   test_monkeypatch   s    rq   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    n1 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   rS   rB   r;   rrJ   r<   rI   wFc                  W   s   dS )Nr:   r   r   r   r   r	   <lambda>       ztest_open.<locals>.<lambda>c                 S   s0   g | ]\}}|d kr|d r|d |d fqS )rS   r:   r   r   rL   r   r   r	   r         0 ztest_open.<locals>.<listcomp>c                 S   s0   g | ]\}}|d kr|d s|d |d fqS )rS   r:   r   r;   r   rL   r   r   r	   r      rx   c                 S   s   g | ]}|d ur|qS r   r   r   r   r   r	   r      s
    )r<   rs   )sslZcreate_default_contextload_dh_paramsImportErrorr   rS   r   argv
executabler8   r!   r   r3   )ry   rz   r?   fnr   Zactual_modeZactual_flagr   r   r	   	test_open   sF   


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3r:   4r   call   )r   settracer   evalZ__cantrace__r3   )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   rt      r:   r;   )rt   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.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      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   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   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>.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   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.r:   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   c                  C   sx   dd l } dd }t| | d |  d | | j |   |  d | j| j| jd d t_	|   |   d S )Nr   c                 S   r   )Nzsyslog.r   r   r   r   r	   r?     r   ztest_syslog.<locals>.hookZpythonr   Ztest2)Z	logoptionZfacility)
syslogr   r   ZopenlogZ
setlogmaskZ	LOG_DEBUGZcloselogZ
LOG_NDELAYZ
LOG_LOCAL0r|   )r   r?   r   r   r	   test_syslog  s   



r   c                  C   sB   dd l } dd }t| |  D ]}t|tr||vsJ qd S )Nr   c                  W   r   r   r   ru   r   r   r	   rv     rw   z test_not_in_gc.<locals>.<lambda>)r   r   r   r   r5   list)r   r?   rY   r   r   r	   test_not_in_gc  s   

r   __main__)suppress_msvcrt_assertsr:   )#r    
contextlibrV   r   r   r)   r-   r.   r3   contextmanagerr8   r@   rD   rE   r]   rd   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   Ztest.supportr   r|   r   globalsr   r   r   r	   <module>   sF    $


 +!
