o
    °ó®g¯  ã                   @   s   	 d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ eedƒr)eedƒs.e 	d¡‚e 
d¡ZG d	d
„ d
ejƒZedkrFe ¡  dS dS )é    N)Úsupport)Úimport_helper)Ú	os_helperÚaddaudithookÚauditz.test only relevant when sys.audit is availablezaudit-tests.pyc                   @   sœ   e Z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!d"„ Zd#d$„ Zd%S )&Ú	AuditTestc                 G   s”   t jtjdtg|¢dt jt jd/}| ¡  tj |j¡ tj	 |j	¡ |j
r8|  d |j	¡¡ W d   ƒ d S W d   ƒ d S 1 sCw   Y  d S )Nú-X utf8úutf-8©ÚencodingÚstdoutÚstderrÚ )Ú
subprocessÚPopenÚsysÚ
executableÚAUDIT_TESTS_PYÚPIPEÚwaitr   Ú
writelinesr   Ú
returncodeÚfailÚjoin)ÚselfÚargsÚp© r   úE/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_audit.pyÚdo_test   s   üö	"÷zAuditTest.do_testc                 G   s€   g }t jtjdtg|¢dt jt jd#}| ¡  tj |j¡ |j	dd„ |j
D ƒd |j¡fW  d   ƒ S 1 s9w   Y  d S )Nr   r	   r
   c                 S   s   g | ]	}|  ¡  d ¡‘qS )ú )ÚstripÚ	partition)Ú.0Úliner   r   r   Ú
<listcomp>,   s    z(AuditTest.run_python.<locals>.<listcomp>r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   Úeventsr   r   r   r   Ú
run_python    s   ü
ý$øzAuditTest.run_pythonc                 C   ó   |   d¡ d S )NÚ
test_basic©r   ©r   r   r   r   r)   0   ó   zAuditTest.test_basicc                 C   r(   )NÚtest_block_add_hookr*   r+   r   r   r   r-   3   r,   zAuditTest.test_block_add_hookc                 C   r(   )NÚ!test_block_add_hook_baseexceptionr*   r+   r   r   r   r.   6   r,   z+AuditTest.test_block_add_hook_baseexceptionc                 C   ó   t  d¡ |  d¡ d S )NÚmarshalÚtest_marshal©r   Úimport_moduler   r+   r   r   r   r1   9   ó   
zAuditTest.test_marshalc                 C   r/   )NÚpickleÚtest_pickler2   r+   r   r   r   r6   >   r4   zAuditTest.test_picklec                 C   r(   )NÚtest_monkeypatchr*   r+   r   r   r   r7   C   r,   zAuditTest.test_monkeypatchc                 C   s   |   dtj¡ d S )NÚ	test_open)r   r   ZTESTFNr+   r   r   r   r8   F   s   zAuditTest.test_openc                 C   r(   )NÚtest_cantracer*   r+   r   r   r   r9   I   r,   zAuditTest.test_cantracec                 C   r(   )NÚ	test_mmapr*   r+   r   r   r   r:   L   r,   zAuditTest.test_mmapc                 C   s6   |   d¡\}}}|s|  d|› ¡ |  dg|¡ d S )NÚtest_excepthookzExpected fatal exception
)zsys.excepthookr    zRuntimeError('fatal-error'))r'   r   ÚassertSequenceEqual©r   r   r&   r   r   r   r   r;   O   s   ÿzAuditTest.test_excepthookc                 C   sJ   |   d¡\}}}|r|  |¡ |  |d d d¡ |  |d d d¡ d S )NÚtest_unraisablehookr   zsys.unraisablehooké   zDRuntimeError('nonfatal-error') Exception ignored for audit hook test)r'   r   ÚassertEqualr=   r   r   r   r>   X   s   

þzAuditTest.test_unraisablehookc                 C   s¸   t  d¡ |  d¡\}}}|r|  |¡ |  |d d d¡ |  |d d d¡ |d d }|  |¡ |  dd	|› d
g|d ¡ |  dd	|› dg|d ¡ |  dd	|g|d ¡ d S )NÚwinregÚtest_winregr   zwinreg.OpenKeyé   zwinreg.OpenKey/resultr?   zwinreg.EnumKeyr    z 0z 10000é   zwinreg.PyHKEY.Detaché   )r   r3   r'   r   r@   Ú
assertTruer<   )r   r   r&   r   Úexpectedr   r   r   rB   c   s   


zAuditTest.test_winregc                 C   s”   t  d¡ |  d¡\}}}|r|  |¡ tjrt|ddiŽ |  |d d d¡ |  |d d d¡ |  |d	 d d
¡ |  |d	 d	  	d¡¡ d S )NÚsocketÚtest_socketÚsepÚ
r   zsocket.gethostnamerC   zsocket.__new__r?   zsocket.bindz('127.0.0.1', 8080))
r   r3   r'   r   r   ÚverboseÚprintr@   rF   Úendswithr=   r   r   r   rI   q   s   

zAuditTest.test_socketc                 C   sP   |   d¡\}}}|r|  |¡ tjrt|ddiŽ |  dd„ |D ƒg d¢¡ d S )NÚtest_gcrJ   rK   c                 S   ó   g | ]}|d  ‘qS ©r   r   )r#   Úeventr   r   r   r%   †   ó    z%AuditTest.test_gc.<locals>.<listcomp>)zgc.get_objectszgc.get_referrerszgc.get_referents)r'   r   r   rL   rM   r@   r=   r   r   r   rO   ~   s   
þzAuditTest.test_gcc                 C   s¤   t  d¡ |  d¡\}}}|r|  |¡ tjrt|ddiŽ |  |d d d¡ |  |d d d¡ |  |d	 d d
¡ |d	 d dkrP|  d|d	 d ¡ d S d S )Nzhttp.clientZtest_http_clientrJ   rK   r   zhttp.client.connectr?   zwww.python.org 80rC   zhttp.client.sendz[cannot send]ZHTTP)	r   r3   r'   r   r   rL   rM   r@   ZassertInr=   r   r   r   Ú	test_http‹   s   

ÿzAuditTest.test_httpc                 C   s–   zdd l }W n
 ty   Y d S w |  d¡\}}}|r |  |¡ tjr*t|ddiŽ dd„ |D ƒ}ddgd	 }t|jd
ƒrC|ddg7 }|  	||¡ d S )Nr   Útest_sqlite3rJ   rK   c                 S   rP   rQ   r   )r#   Zevr   r   r   r%   ¥   rS   z*AuditTest.test_sqlite3.<locals>.<listcomp>zsqlite3.connectzsqlite3.connect/handler?   Zenable_load_extensionzsqlite3.enable_load_extensionzsqlite3.load_extension)
Úsqlite3ÚImportErrorr'   r   r   rL   rM   ÚhasattrÚ
Connectionr@   )r   rV   r   r&   r   ÚactualrG   r   r   r   rU   š   s$   ÿ
þzAuditTest.test_sqlite3N)Ú__name__Ú
__module__Ú__qualname__r   r'   r)   r-   r.   r1   r6   r7   r8   r9   r:   r;   r>   rB   rI   rO   rT   rU   r   r   r   r   r      s&    	r   Ú__main__)r   r   ZunittestÚtestr   Ztest.supportr   r   rX   ZSkipTestZfindfiler   ZTestCaser   r[   Úmainr   r   r   r   Ú<module>   s    

 ÿ